Woj*_*tak 10 c++ templates template-meta-programming
让我们假设,我们有一个模板功能:
template<typename T1, typename T2, typename T3>
T3 such_fun(T1 a, T2 b) {
// do something...
}
Run Code Online (Sandbox Code Playgroud)
现在我们想将它用作另一个模板中的参数,例如像那样
template<typename T1, template<typename, typename, typename> some_function>
void big_fun(T1 a) {
// some code...
a = some_function<T1, T1, T1>(a, a);
// some code...
}
Run Code Online (Sandbox Code Playgroud)
可能吗?
我知道我可以使用带有defined()运算符的结构.我只是对功能感到好奇.
编辑:
当我写这个问题时,我的朋友发现了一个部分解决方案:
template<typename T1, T1 (*some_function)(T1, T1)>
void big_fun(T1 a) {
// some code...
a = some_function(a, a);
// some code...
}
Run Code Online (Sandbox Code Playgroud)
但是仍然 - 如果没有在调用之前实现函数类型的实现,我很好奇.例如 - 我可能想要使用各种类型组合调用传递的模板:
template<typename T1, typename T2, template<typename, typename, typename> some_function>
void big_fun(T1 a, T2 b) {
// some code...
a = some_function<T1, T1, T1>(a, a);
a = some_function<T1, T2, T1>(a, b);
b = some_function<T2, T2, T2>(b, b);
b = some_function<T2, T1, T2>(b, a);
// some code...
}
Run Code Online (Sandbox Code Playgroud)
不,这是不可能的.从N3337的14.3.3开始:
模板template-parameter的template-argument应该是类模板或别名模板的名称,表示为id-expression.当template-argument命名一个类模板时,在将模板模板参数与相应参数匹配时,只考虑主类模板; 即使参数列表与模板模板参数的参数列表匹配,也不会考虑部分特化.
第一段仅明确提到类模板.我想这也是不值得的麻烦,因为你可以用功能或std::function作为参数做一些非常相似的事情.
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |