Kou*_*tty 15 c++ initializer-list c++11
std::vector
可以初始化为
std::vector<std::string> words1 {"the", "frogurt", "is", "also", "cursed"};
Run Code Online (Sandbox Code Playgroud)
现在,如果想要为我的某个类型实现类似的功能,我该如何去做呢?我该如何实现此功能的构造函数?
标准如何支持我实现这一目标(参考标准将是最有帮助的)?基本上,如果你可以教我如何实现std::vector
它就足够了.
这可以在C++ 11之前完成吗?
另外,我可以使用POD结构类型初始化列表,以便我可以使用不同类型的值来初始化我的类型吗?
Yuu*_*shi 26
创建一个构造函数,该构造函数将a std::initializer_list
作为参数:
#include <vector>
#include <initializer_list>
template <typename T>
struct foo
{
private:
std::vector<T> vec;
public:
foo(std::initializer_list<T> init)
: vec(init)
{ }
};
int main()
{
foo<int> f {1, 2, 3, 4, 5};
}
Run Code Online (Sandbox Code Playgroud)
std::vector
这几乎是完全相同的方式(尽管使用begin()
和end()
- std::initializer_list
迭代器与其他容器的方式大致相同).来自gcc
:
vector(initializer_list<value_type> __l,
const allocator_type& __a = allocator_type())
: _Base(__a)
{
_M_range_initialize(__l.begin(), __l.end(),
random_access_iterator_tag());
}
Run Code Online (Sandbox Code Playgroud)
编辑:我不是100%你正在尝试做什么,但你可能只是能够使用统一初始化来获得你想要的:
struct bar
{
private:
int i;
double j;
std::string k;
public:
bar(int i_, double j_, const std::string& k_)
: i(i_), j(j_), k(k_)
{ }
};
int main()
{
bar b {1, 2.0, "hi"};
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8494 次 |
最近记录: |