typedef类型的单独模板

时间:2012-09-14 20:46:04

标签: c++ templates typedef

我创建了一个模板类,它根据数据类型输出值,即long输出为有符号整数(十进制),而RESULT以十六进制格式输出。我将RESULT定义为:

typdef long RESULT.

这不能正常工作,因为RESULT被视为longRESULT的输出例程永远不会被调用(而long的例程被调用)。有解决方法吗?

3 个答案:

答案 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

相关问题