繁体   English   中英

我如何以不同的方式专门化typedef及其隐式类型?

[英]How can I specialize a typedef and its implicit type differently?

我有这样的事情:

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

答案是不。 键入def时,为类型创建别名,而不是实际类型。 编译器会同时对待它们。 这就是为什么:

typedef int Foo;
typedef int Bar;

Bar bar = 1;
Foo foo = bar;

会编译。 他们都是整体的。

您可以使用BOOST_STRONG_TYPEDEF

我很确定你不能让编译器对int和AnotherType进行不同的处理。 所有typedef都是别名类型 - 它实际上并不创建新类型; 根据typedef结构的定义,编译器将在所有情况下处理int和AnotherType等价。

如果你需要一个只有一个被不同处理的int的类型,你应该只创建一个单成员struct 包含int的大多数操作将编译为与裸int相同的机器代码,但现在您的数据类型可以有自己的模板特化等。

然后你被搞砸了。 抱歉。 如果您无法更改定义以使用强类型定义,那么您真正拥有的唯一选项(强类型定义)不是一个选项。

编译器会将两个特化都视为完全相同,因为AnotherType只是int另一个名称。 你说你不需要专门用于int ,所以只需完全删除那个专门化,让它专注于AnotherType碰巧遇到的任何类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM