gpt4 book ai didi

c++ - 从初始化列表中提取模板类型

转载 作者:太空狗 更新时间:2023-10-29 21:00:00 25 4
gpt4 key购买 nike

我对 C++11 模板代码有疑问。我有一个模板函数

    template <typename T> 
f(const std::vector<T>& v)
{
/* do something here*/
};

当我调用 f(v) 时, 其中v声明为 std::vector<some_type> v; ,程序编译得很好。但是,如果我将初始化列表传递给 f ,说 f({a,b,c}) , 其中a , b , c都是同一类型,比如some_type ,我得到一个编译错误:couldn't infer template argument 'T' ,所以我必须在调用时手动指定类型 f .即,例如 f<int>({a,b,c});a 时编译得很好, bc都是int秒。有什么方法可以推断模板类型 T来自标准初始化列表,假设该函数被定义为采用 std::vector<T> 的参数?基本上我只想调用 f({initializer_list});未指定 initializer_list 的元素类型调用时在尖括号中 f .

最佳答案

你可以定义

template<typename T>
void f(const std::initializer_list<T>& v) {
f(std::vector<T>(v));
}

要让它工作,initializer_list 必须是某种明确的类型,所以 f({0, 1.41421, 2.71828, 3.14159 }) 不会工作,但是 f({ 0.0, 1.41421, 2.71828, 3.14159}) 会。

关于c++ - 从初始化列表中提取模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23259432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com