Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可变模板参数语法_C++_Templates_C++11_Variadic Templates - Fatal编程技术网

C++ 可变模板参数语法

C++ 可变模板参数语法,c++,templates,c++11,variadic-templates,C++,Templates,C++11,Variadic Templates,我有这个模板函数(我记得在某处看到过类似的东西)。它同时适用于std::function和std::list(作为容器)。但是我不能真正理解语法模板类容器。与C/旧C++相比,中的内容似乎是一种不同的语言。有人能解释一下吗,或者提供一个很好的参考来解释这一点 template <typename T, template <typename, typename...> class Container> static bool contained(const T &

我有这个模板函数(我记得在某处看到过类似的东西)。它同时适用于
std::function
std::list
(作为
容器
)。但是我不能真正理解语法
模板类容器
。与C/旧C++相比,
中的内容似乎是一种不同的语言。有人能解释一下吗,或者提供一个很好的参考来解释这一点

template <typename T, template <typename, typename...> class Container>
static bool contained(const T & x, const Container<T> & xs) {
    return std::find(xs.begin(),xs.end(),x) != xs.end();
}
模板
包含静态布尔(常量T&x、常量容器和xs){
返回std::find(xs.begin(),xs.end(),x)!=xs.end();
}

然而,这个特殊的问题可以在不使用模板参数的情况下得到解决。只需接受任何类型的
容器
,而不是将其作为模板。您要搜索的元素的类型可以通过使用标准库中所有容器定义的
Container::value\u type
嵌套类型来指定

template <typename Container>
static bool contained(typename Container::value_type const& x, 
                      const Container& xs) {
    return std::find(xs.begin(),xs.end(),x) != xs.end();
}
模板
包含静态bool(typename容器::value\u type const&x,
常量容器(xs){
返回std::find(xs.begin(),xs.end(),x)!=xs.end();
}

此外,C++11还添加了与
contained()
函数相同的功能。

您可能会发现这个小小的修改很有趣。请注意,这将不会使用clang3.4对libc++进行编译(但可以使用链接的libstdc++)。区别在于如何实现
std::list
。添加一个可变参数包可以解决这个问题,与第一个参数包相比的输出值得检查。很高兴知道。
template <typename T, typename... Params, 
          template <typename, typename...> class Container>
static bool contained(const T & x, const Container<T, Params...> & xs) {
    return std::find(xs.begin(),xs.end(),x) != xs.end();
}
template <typename Container>
static bool contained(typename Container::value_type const& x, 
                      const Container& xs) {
    return std::find(xs.begin(),xs.end(),x) != xs.end();
}