我创建了一个模板类,它根据数据类型输出值,即 long 作为有符号整数(十进制)输出,而RESULT
以十六进制格式输出。我定义RESULT
为:
typdef long RESULT.
这不能正常工作,因为RESULT
被视为 a long
andRESULT
的输出例程永远不会被调用(而是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