0

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

typdef long RESULT.

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

4

3 回答 3

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;
于 2012-09-14T21:04:29.197 回答
1

这是意料之中的。

typedef 不会改变编译器如何看待类型——它为类型创建一个新名称,在这种情况下为 RESULT,并且由于它是相同的类型,它的行为和使用与指定类型相同的代码,在此案例长。

于 2012-09-14T20:48:49.653 回答
1

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

于 2012-09-14T20:59:06.277 回答