【发布时间】:2015-02-05 23:20:28
【问题描述】:
我想用长签名实例化一些函数:
template<typename T> void foo(
T& t,
SomeType some_parameter,
AnotherType another_parameter,
EtcType yet_another_parameter,
AsYouCanTell this_is_a_very_long_signature);
实例化foo 的直接方法是:
template void foo<int>(
int& t,
SomeType some_parameter,
AnotherType another_parameter,
EtcType yet_another_parameter,
AsYouCanTell this_is_a_very_long_signature);
但这是长签名的重复。如果我想要 5 种不同类型的特定实例化怎么办——我要复制 5 次吗?没道理……
我在想也许我可以写
template decltype(foo<int>);
但由于某种原因,这不起作用。我可以让它工作吗?
【问题讨论】:
-
他不想做任何这些事情。他正在尝试显式实例化此模板。
-
你不需要函数参数的名称,顺便说一句:
template foo<int>(int&, SomeType, AnotherType, EtcType, AsYouCanTell);。您可以使用类型别名进一步缩短类型名称。 -
我想知道您是否可以滥用 C++14 的变量模板来执行此操作:与其显式实例化函数模板,不如显式实例化引用函数模板的变量模板可能就足够了。可能,使用静态数据成员和别名模板也可以实现类似的效果,但我不确定。
标签: c++ templates c++11 instantiation decltype