对于某些特定的模板参数,我需要使用长签名实例化模板化函数foo()
。
我刚刚阅读了this question的答案,其中基本上建议复制函数签名但设置特定参数。我想以某种方式避免这种情况。实现这一目标的合理方法是什么?例如一些可以让我写的东西
INSTANTIATE(foo, template_arg1, template_arg2);
或者
MyFunctionType<template_arg1, template_arg2> foo;
仅出于说明目的,假设这是foo
的代码:
template<typename T, int val>
unsigned foo(
T bar,
SomeType baz1,
SomeOtherType baz2,
YetAnotherType you_catch_the_drift)
{
/* some code here */
}
答案 0 :(得分:0)
在函数模板的显式实例化中,如果可以推导出所有参数,则可以在template-id之后省略模板参数列表:
template<typename T> void foo(T) {}
template void foo(int); // explicit instantiation
// ^ no template parameter list here
但不是在你的情况下,因为需要明确传递val
参数。这是您的显式实例化的样子:
template unsigned foo<int, 0>(int, char, double, float);
那是不是很糟糕?你可以编写一个宏来避免一些重复,但看起来首先没有太多。
答案 1 :(得分:0)
您可以简单地定义一个宏:
#define INSTANTIATE_FOO(T, val) \
template \
unsigned foo<T, val>( \
T bar, \
SomeType baz1, \
SomeOtherType baz2, \
YetAnotherType you_catch_the_drift);
并按以下方式使用它:
INSTANTIATE_FOO(int, 0)