我有这样的事情:
typedef int AnotherType;
template <typename T> Func( T Value );
// And I want to specialize these two cases separately:
template <> bool Func<int>( int Value ) {...}
template <> bool Func<AnotherType>( AnotherType Value ) {...}
我真的不需要专门针对int,我真正需要的是为AnotherType执行不同的函数。我无法更改AnotherType或基本函数的定义。
由于SFINAE,重载无效。
答案 0 :(得分:3)
答案是否定的。键入def时,为类型创建别名,而不是实际类型。编译器会同时对待它们。这就是原因:
typedef int Foo;
typedef int Bar;
Bar bar = 1;
Foo foo = bar;
将编译。他们都是整体。
答案 1 :(得分:2)
您可以使用BOOST_STRONG_TYPEDEF。
答案 2 :(得分:1)
我很确定你不能让编译器对int和AnotherType进行不同的处理。所有typedef都是别名类型 - 它实际上并不创建新类型;根据typedef结构的定义,编译器将在所有情况下处理int和AnotherType等效。
如果你需要一个只有一个被区别对待的int的类型,你应该只做一个成员struct
。包含int的大多数操作将编译为与裸int相同的机器代码,但现在您的数据类型可以有自己的模板特化等。
答案 3 :(得分:1)
我无法更改AnotherType或基本功能的定义。
然后你被搞砸了。抱歉。如果您无法更改定义以使用强类型定义,那么您真正拥有的唯一选项是强类型定义。
答案 4 :(得分:0)
编译器会将两个特化都视为完全相同,因为AnotherType
只是int
的另一个名称。你说你不需要专门研究int
,所以只需完全删除那个专门化,让它专注于任何类型的AnotherType
。