【发布时间】:2015-01-28 07:52:08
【问题描述】:
有没有办法强制 C++ 编译器在模板实例化期间(而不是之前)对给定符号执行名称查找?
给定以下代码:
template <class T>
auto wrapper( T t ) -> decltype( f( t ) )
{
return f( t );
}
unsigned char f( int x ) { return x % 256; }
unsigned char f( unsigned char x ) { return x; }
int main( int, char ** )
{
auto x = wrapper( 3100 );
return 0;
}
我能做些什么(除了将f 的定义移到顶部)以使该代码编译并给出相同的结果,就好像f 的所有定义在@ 的定义之前都可用一样987654324@?
我找不到任何东西,可能是因为我不知道如何正确表达这个问题。 f 的所有参数类型都可以假定为用户定义的类型,如果这有帮助的话。
【问题讨论】:
-
为什么不使用模板专业化?
-
@Chiel:谢谢,好主意!所以我会用类模板替换
f?这行得通,但我希望有一个不需要我更改f定义的解决方案(很多)。还是你有别的想法? -
您可以使用适用于大多数情况的默认设置,并在需要时使用专业化,请参阅我的回答。
标签: c++ templates name-lookup