効率的な数値処理のためのライブラリを作成しています。私はdouble
、complex
、あるいはcustom_matrix
の多種多様な数字をサポートしなければなりません。パフォーマンス上の理由から、コンパイラは算術演算と関数呼び出しに積極的な最適化を使用できるように、数値型ごとに別々のライブラリファイルをコンパイルすることに決めました。今度は、パラメータnumber_type
を持つテンプレートクラスを作成するためのオプションが2つあります。C++ - テンプレートとtypedefベースのクラス階層
template <typename valueType>
class Worker {
valueType process(valueType value);
};
またはtypedef
プロジェクトワイドヘッダファイルの番号種別。
in 'project.hpp':
namespace myProject {
typedef double valueType;
}
in 'worker.hpp':
#include "project.hpp"
namespace myProject {
class Worker {
valueType process(valueType value);
};
}
個人的に私はどちらかの方法を受け入れることができない:テンプレートベースのコードが冗長template
とtypename
キーワードのトンと非常識な私を運転している、一方のtypedefベースのコードは、単一のライブラリファイルにコンパイルすることはできません(リンクが失敗しました名前が重複しているため)、1つのプログラムで異なる番号タイプを使用することはできません。
質問には次のようなものがあります。私は何か不足していますか?私の仕事を達成するためのより良い/よりクリーンな方法がありますか?
編集:double
コードとcomplex
コードを1つのアプリケーションで同時に使用する必要があります。
EDIT2:わかりやすく言うと、iOSアプリケーション用の算術式解析エンジンを開発しています。したがって、私はC/C++/Objective-Cに限られており、パフォーマンスが重要です。
また、一般的な状況ではテンプレートを使用するのが快適です。私の状況では、私のすべてのソースファイルは山括弧とtemplate
/typename
のキーワードでいっぱいです。それは単に迷惑であり、重要な文章を書くことから私をそらす。
私は、私が見る限り、よりよい解決策がないので、テンプレートを使用すると思います。
あなたがC++を使ってはならないよりも、テンプレートを「受け入れる」ことができないならば。 – ildjarn