我希望能够命名模板中的模板化函数。
由于可以使用“模板模板”语法命名模板类,并且可以使用“函数指针”语法命名函数,我想知道是否有语法(或建议)来命名模板中的函数没有指定模板。
template<typename t_type>
struct A {
t_type value;
};
template<template<typename> class t_type>
struct B {
t_type<int> value;
};
template<int added>
constexpr int C (int value) {
return value + added;
}
template<int (*function)(int)>
constexpr int D (int value) {
return function(value);
}
// GOAL: Template argument referring to templated function
/*template<template<int> int (*function)(int)>
constexpr int E (int value) {
return function<1>(value);
}*/
int main() {
B<A> tt_good;
int fp_good = D< &C<1> >(0);
/*int fp_fail = E< &C >(0);*/
return 0;
}
对于任何对此功能感兴趣的人来说,一种可能的解决方法是首先将函数 D 包装在一个带有名为(例如)“方法”的调用方法的结构中,将该结构作为“模板模板”参数传递给 E,然后调用“方法”在 E.
我不喜欢这种方法的原因是它需要一个包装结构,用于可能以这种方式使用的每个可变参数函数。