gpt4 book ai didi

C++:从装箱元素的 vector 构造一个 Box 类型的 vector

转载 作者:行者123 更新时间:2023-11-30 05:13:34 26 4
gpt4 key购买 nike

以下是我的类型系统的简化摘录:

#include <string>
#include <vector>

template<typename T>
class Box {
public:
Box(const T& value) : _value(value) {};
T _value;
};

template <class T>
class Vector : protected std::vector<T> {
public:
Vector() {}
Vector(const std::vector<T>& values) { /* ...*/ }
using std::vector<T>::push_back;
};

typedef Box<int> Int;
typedef Box<std::string> String;

int main(int argc, char* argv[]) {
Vector<Int> v1;
v1.push_back(Int(0));

std::vector<String> strings2 = { String("a"), String("b") };
Vector<String> v2(strings2);

std::vector<std::string> strings3 = { "a", "b" };
// The following does not compile, since strings3 elements
// are of the sub type
Vector<String> v3(strings3);
}

如何定义允许最后一行编译的构造函数?

当然,对于这个小代码示例,VectorBox 可能有更好的设计,但这里的类型过于简单了。

最佳答案

你可以添加一个模板构造函数:

template <typename U,
std::enable_if_t<std::is_constructible<T, U>::value>* = nullptr>
Vector(const std::vector<U>& values);

关于C++:从装箱元素的 vector 构造一个 Box 类型的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43899655/

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