包含可变参数模板的元组

时间:2014-05-18 03:34:13

标签: c++ templates c++11 tuples

我有以下代码:

template<typename... A>
void queueQuery(std::string query, std::function<void(A...)> callback = nullptr);

template<typename... A>
std::tuple<std::string, std::function<void(A...)> queryCallback;

std::queue<queryCallback> queryQueue;

我想创建一个字符串和函数元组的队列,其中包含任意给定类型的可变数(非常复杂,我理解)。

有没有办法让这个可以实现?

我目前收到以下错误:

/databasedispatcher.h:14: error: data member 'queryCallback' cannot be a member template

1 个答案:

答案 0 :(得分:2)

您正在定义queryCallback

template<typename... A> 
std::tuple<std::string, std::function<void(A...)> queryCallback;

作为变量模板(仅符合C ++ 14)。你确定那是你想要的吗?

如果你想要严格遵守C ++ 11,那么将你的变量包装成如下所示的结构:

template<typename... A> 
struct Foo{
    std::tuple<std::string, std::function<void (A...)> > queryCallback;
};

然后将其用作临时的do_something(Foo<int, double>().queryCallback);Foo<int, double> foo; do_something(foo.queryCallback);希望这会有所帮助。