データ型に基づいて値を出力するテンプレートクラスを作成しました。つまり、longは符号付き整数(10進数)としてRESULT
出力されますが、16進形式で出力されます。私は次のように定義RESULT
しました:
typdef long RESULT.
RESULT
のように扱われ、long
の出力ルーチンが呼び出されることはないため、これは正しく機能していませんRESULT
(代わりにlong
のルーチンが呼び出されます)。これに対する回避策はありますか?
あなたが望むものは、与えられた理由でうまくいきません。
必要に応じて出力をフォーマットする Function オブジェクトを追加するだけではどうですか。
class A {
template< typename T>
std::string output(long val) {return T(val)}
}
struct decimal {
std::string operator()(long val) {//return decimal}
}
struct hex {
std::string operator()(long val) {//return hex}
}
ユースケースの例:
A a;
cout << a.output<decimal>(10) << endl;
cout << a.output<hex>(10) << endl;
これは予想されます。
typedefは、コンパイラが型を認識する方法を変更しません。型の新しい名前(この場合はRESULT)を作成します。これは同じ型であるため、指定された型と同じ動作とコードを使用します。ケースが長い。
typedef
alias
タイプのみを宣言します。あなたの例にはいくつかの " " を使うことができtemplate magic
ます。
template<typename T, int I>
struct true_typedef
{
explicit true_typedef(const T& val):value(val) { }
T value;
};
typedef true_typedef<long, 0> RESULT;
例。
http://liveworkspace.org/code/1fc907ae5cddc23bd7d9545cfafa8a05