C++11 我们可以使用参数包作为std::vector初始值设定项吗? 我正在用C++ 11进行实验(我已经用了旧C++),我写了以下代码: #include <iostream> #include <vector> #include <type_traits> using namespace std; constexpr bool all_true(){ return true; } template <typename Head, typename... Tail> constexpr bool all_true(Head head, Tail... tail){ static_assert( is_convertible<bool, Head>::value, "all_true arguments must be convertible to bool!"); return static_cast<bool>(head) && all_true(tail...); } template<typename T, typename... Args> void print_as(Args... args){ static_assert( all_true(is_convertible<T,Args>::value...), "all arguments must be convertible to the specified type!"); vector<T> v {static_cast<T>(args)...}; for(T i : v) cout << i << endl; } int main(){ print_as<bool>(1, 2, 0, 4.1); }

C++11 我们可以使用参数包作为std::vector初始值设定项吗? 我正在用C++ 11进行实验(我已经用了旧C++),我写了以下代码: #include <iostream> #include <vector> #include <type_traits> using namespace std; constexpr bool all_true(){ return true; } template <typename Head, typename... Tail> constexpr bool all_true(Head head, Tail... tail){ static_assert( is_convertible<bool, Head>::value, "all_true arguments must be convertible to bool!"); return static_cast<bool>(head) && all_true(tail...); } template<typename T, typename... Args> void print_as(Args... args){ static_assert( all_true(is_convertible<T,Args>::value...), "all arguments must be convertible to the specified type!"); vector<T> v {static_cast<T>(args)...}; for(T i : v) cout << i << endl; } int main(){ print_as<bool>(1, 2, 0, 4.1); },c++11,stdvector,variadic-templates,C++11,Stdvector,Variadic Templates,谢谢 是的,可以在初始化器列表中使用包扩展。C++11[温度变量]§4允许: 。。。包扩展可以在以下上下文中发生: 在初始值设定项列表中(8.5);模式是一个初始值设定项子句 不,没有办法生成非模板类型安全的可变函数。你所拥有的一切都很好。最近发生了一件事 1) 谢谢,我没有考虑直接查看标准规范。。。2) 我认为如果可以使用指定类型的参数包,这将是对标准的一个很好的补充。让我们期待未来的新成员! constexpr bool all_true(bool head, bool... tai

谢谢

  • 是的,可以在初始化器列表中使用包扩展。C++11[温度变量]§4允许:

    。。。包扩展可以在以下上下文中发生:

    • 在初始值设定项列表中(8.5);模式是一个初始值设定项子句
  • 不,没有办法生成非模板类型安全的可变函数。你所拥有的一切都很好。最近发生了一件事

  • 1) 谢谢,我没有考虑直接查看标准规范。。。2) 我认为如果可以使用指定类型的参数包,这将是对标准的一个很好的补充。让我们期待未来的新成员!
    constexpr bool all_true(bool head, bool... tail){...} // This code doesn't compile