【发布时间】:2014-09-16 20:50:21
【问题描述】:
我有一个问题涉及 C++ 中模板类的功能模板参数。
我想定义一个模板类Foo,采用单个模板参数Fun
template <typename Fun>
struct Foo {
...
};
这样给定一个函数
void bar(std::string a, float b, char c)
{
...
}
那么Foo<bar>::args_t 将相当于一个typedef
std::tuple<std::string, float, char>
这可能吗? (这里使用std::tuple 只是为了具体。更一般地说,我想知道是否可以对功能模板参数的参数进行模式匹配。)
关键是避免必须以类似的方式定义Foo
template Foo<typename A, typename B, typename C, typename D,
D (*Fun)(A a, B b, C c)>
struct Foo {
typedef std::tuple<A,B,C> args_t;
};
这需要提交固定数量的函数参数,并要求函数的参数和返回类型作为模板参数显式提供。 (使用可变参数模板定义Foo大概可以解决前一个问题,但后者呢?)
谢谢!
【问题讨论】:
-
查看可变参数模板。此外,您可能希望避免使用
_t命名类型,因为它们在 POSIX 中保留。 -
@user657267 我非常了解可变参数模板,并在我的问题中提到了它们。关于使用
_t命名类型的评论似乎有点超出了左侧字段。 -
这就是为什么它是评论而不是答案。
标签: c++ templates c++11 variadic-templates