6

我有这样的事情:

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,重载也无济于事。

4

5 回答 5

3

答案是不。当你 typedef 你为一个类型创建一个别名,而不是一个实际的类型本身。编译器将两者一视同仁。这就是为什么:

typedef int Foo;
typedef int Bar;

Bar bar = 1;
Foo foo = bar;

会编译。他们都是整数。

于 2011-01-28T20:50:52.147 回答
2

您可以使用BOOST_STRONG_TYPEDEF

于 2011-01-28T20:57:37.143 回答
1

我很确定您不能让编译器以不同的方式处理 int 和 AnotherType 。typedef 所做的只是别名类型——它实际上并没有创建新类型;根据 typedef 构造的定义,编译器将在所有情况下等效地对待 int 和 AnotherType。

如果你需要一个只有一个被区别对待的 int 类型,你可能应该只创建一个 single-member struct。包含的 int 上的大多数操作将编译为与裸 int 相同的机器代码,但现在您的数据类型可以有自己的模板特化等。

于 2011-01-28T20:53:56.453 回答
1

而且我无法更改 AnotherType 或基本函数的定义。

那你就完蛋了。对不起。如果您不能将定义更改为使用强 typedef,那么您真正拥有的唯一选项(强 typedef)不是一个选项。

于 2011-01-28T21:00:50.960 回答
0

编译器会将这两种特化视为完全相同,因为AnotherType只是int. 您说您不需要专门化int,所以只需完全删除该专业化并让它专门针对任何类型AnotherType的工作。

于 2011-01-28T20:56:01.030 回答