如果两个对象的模板参数在运行时相同,是否有任何方法可以从给定对象构造一个新对象?例如:C++模板类和复制构造
我与声明中的模板类:
template<typename _Type1, typename _Type2> class Object;
接下来,我有模板的两个示例:
template class Object<char, int>;
template class Object<wchar_t, wint_t>;
现在,我想编写一个成员函数,作为:
template<typename _Type1, typename _Type2>
Object<char, int> Object<_Type1, _Type2>::toCharObject() {
if(__gnu_cxx::__are_same<_Type1, char>::__value)
return *this;
else {
//Perform some kind of conversion and return an Object<char, int>
}
}
我已经尝试了一些技术,如使用__gnu_cxx::__enable_if<__gnu_cxx::__are_same<_Type1, char>::__value, _Type1>::__type
在一个拷贝构造函数为Oject
类,但我一直运行到错误:
error: conversion from ‘Object<wchar_t, wint_t>’ to non-scalar type ‘Object<char, int>’ requested
有没有办法,我能做到这一点?任何帮助将不胜感激!
您的模板类型名称无效。下划线后跟大写字母标识符**保留供实施**使用。它们可能与编译器或标准库定义的名称冲突。 – jalf 2010-04-04 16:06:55
@jaif:别担心类型名称。例如,我只是随便挑选它们。我所有的代码实际上都是在不同的命名空间中定义的,所以应该没有冲突。 – themoondothshine 2010-04-04 16:09:45
命名空间不是问题的名称 - 像_Type1在所有情况下都是保留的(例如,它们可能是宏),在这种情况下,不太可能被实现使用。还是你说你发布的内容不是导致你的问题的真正代码?那么,不要那样做。 – 2010-04-04 16:15:10