我创建了一个模板类,它根据数据类型输出值,即long输出为有符号整数(十进制),而RESULT
以十六进制格式输出。我将RESULT
定义为:
typdef long RESULT.
这不能正常工作,因为RESULT
被视为long
,RESULT
的输出例程永远不会被调用(而long
的例程被调用)。有解决方法吗?
答案 0 :(得分:2)
由于给出的理由,你想要的东西是行不通的。
如何添加一个可以根据需要格式化输出的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;
答案 1 :(得分:1)
这是预期的。
typedef不会改变编译器看到类型的方式 - 它为类型创建一个新名称,在本例中为RESULT,并且由于它是相同的类型,它的行为和使用与指定类型相同的代码,在这种情况下很长。
答案 2 :(得分:1)
typedef
仅为类型声明alias
。你可以使用一些&#34; template magic
&#34;为你的例子。
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