相关疑难解决方法(0)

模板并不总是猜测初始化列表类型

#include <initializer_list>
#include <utility>

void foo(std::initializer_list<std::pair<int,int>>) {}
template <class T> void bar(T) {}

int main() {
    foo({{0,1}});  //This works
    foo({{0,1},{1,2}});  //This works
    bar({{0,1}});  //This warns
    bar({{0,1},{1,2}});  //This fails
    bar(std::initializer_list<std::pair<int,int>>({{0,1},{1,2}}));  //This works
}
Run Code Online (Sandbox Code Playgroud)

这不能在gcc 4.5.3中编译,它会对标记的行说明deducing ‘T’ as ‘std::initializer_list<std::initializer_list<int> >’并标记行的错误说明no matching function for call to ‘bar(<brace-enclosed initializer list>)’.为什么gcc可以推断出第一次调用bar的类型而不是第二次调用的类型,除了漫长而丑陋的演员之外,有没有办法解决这个问题呢?

c++ templates initializer-list c++11

11
推荐指数
2
解决办法
3446
查看次数

如何使用常规构造函数模式初始化C++ 11标准容器?

下面的长显式初始化列表是否可以被生成它的某个模板替换?

std::array<Foo, n_foos> foos = {{
        {0, bar},
        {1, bar},
        {2, bar},
        {3, bar},
        {4, bar},
        {5, bar},
        {6, bar},
        {7, bar},
}};
Run Code Online (Sandbox Code Playgroud)

现在这里的代码只是因为我们有了constexpr int n_foos = 8.怎么能做到任意和大n_foos

c++ templates initializer c++11

6
推荐指数
1
解决办法
280
查看次数

标签 统计

c++ ×2

c++11 ×2

templates ×2

initializer ×1

initializer-list ×1