C++ typdef类型的单独模板

C++ typdef类型的单独模板,c++,templates,typedef,C++,Templates,Typedef,我创建了一个模板类,它根据数据类型输出值,即long以有符号整数(十进制)的形式输出,而RESULT以十六进制格式输出。我将结果定义为: typdef long RESULT. 这无法正常工作,因为RESULT被视为long,而RESULT的输出例程从未被调用(而是调用long的例程)。有解决办法吗?这是意料之中的 typedef不会改变编译器查看类型的方式——它会为类型创建一个新名称,在本例中为RESULT,并且由于它是同一类型,因此它的行为和使用的代码与指定的类型相同,在本例中为long。

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

typdef long RESULT.
这无法正常工作,因为
RESULT
被视为
long
,而
RESULT
的输出例程从未被调用(而是调用
long
的例程)。有解决办法吗?

这是意料之中的

typedef不会改变编译器查看类型的方式——它会为类型创建一个新名称,在本例中为RESULT,并且由于它是同一类型,因此它的行为和使用的代码与指定的类型相同,在本例中为long。

这是意料之中的


typedef不会改变编译器对类型的看法——它会为类型创建一个新名称,在本例中为RESULT,并且由于它是同一类型,它的行为和使用的代码与指定的类型相同,在本例中为long。

typedef
仅为类型声明
别名。您可以使用一些“
模板魔术”
”作为示例

template<typename T, int I>
struct true_typedef
{
    explicit true_typedef(const T& val):value(val) { }
    T value;
};

typedef true_typedef<long, 0> RESULT;
模板
struct true_typedef
{
显式true_typedef(const T&val):值(val){}
T值;
};
typedef true_typedef结果;
例如


typedef
仅声明类型的
别名。您可以使用一些“
模板魔术”
”作为示例

template<typename T, int I>
struct true_typedef
{
    explicit true_typedef(const T& val):value(val) { }
    T value;
};

typedef true_typedef<long, 0> RESULT;
模板
struct true_typedef
{
显式true_typedef(const T&val):值(val){}
T值;
};
typedef true_typedef结果;
例如


由于给出的原因,您想要的东西不起作用

添加一个函数对象,按照您的需要格式化输出,怎么样

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类{
模板
字符串输出(长val){返回T(val)}
}
结构十进制{
std::string运算符()(long val){//返回十进制数}
}
结构十六进制{
std::string操作符()(long val){//返回十六进制}
}
示例用例:

A a;
cout << a.output<decimal>(10) << endl;
cout << a.output<hex>(10) << endl;
A;

由于给出的原因,你想要的东西不起作用

添加一个函数对象,按照您的需要格式化输出,怎么样

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类{
模板
字符串输出(长val){返回T(val)}
}
结构十进制{
std::string运算符()(long val){//返回十进制数}
}
结构十六进制{
std::string操作符()(long val){//返回十六进制}
}
示例用例:

A a;
cout << a.output<decimal>(10) << endl;
cout << a.output<hex>(10) << endl;
A;

我想你想说的是,它为同一类型创建了一个新名称。它特别不创建新类型。@EricPostchil谢谢。我想你想说的是,它为同一类型创建了一个新名称。它特别不创建新类型。@EricPostchil谢谢。编辑。这真的很好,但不幸的是,我不允许更改的定义RESULT@tunafish24:你不认为在问题中提到这些限制是个好主意吗?这真的很好,但不幸的是,我不被允许改变这个词的定义RESULT@tunafish24:你不认为在问题中提到这些限制是个好主意吗?严肃的业务是不允许打字的。严肃的业务是不允许打字的。