我很乐意尝试将函数模板作为template template
参数传递。当然,C ++不允许以这种方式传递函数模板。但我想出了简单的hax:
#include <iostream>
#define PASS_TEMPLATE(name) [](auto&... args){return name(args...);}
template <typename T, typename S>
void function_template(T t, S s) {std::cout << t << ' ' << s << std::endl;}
template <typename Hax, typename T, typename S>
auto test(Hax hax, T t, S s)
{
return hax(t, s);
}
int main()
{
test(PASS_TEMPLATE(function_template), 1, 1.5);
}
问题是:
我只是在GCC 6.1.0上进行测试(我真的希望它不是GCC扩展或其他东西)
答案 0 :(得分:4)
没关系,你可能想要启用完美转发:
mov cx, 1 ;Repetition count
mov al, " " ;Character code
mov bh, 0 ;Display page
mov ah, 0Ah ;Function number
int 10h
答案 1 :(得分:3)
我建议使用完美的转发功能,但除此之外,它是完全可行的(并且除了手动输入所有内容之外可能除此之外)解决问题。
所以,那将是:
component
GCC was broken with generic stateless lambdas,因此您必须添加至少最小的状态,例如#define PASS_TEMPLATE(name) [](auto&&... args){return name(decltype(args)(args)...);}
或类似的东西。幸运的是他们修好了。