- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个带有 vector 的类,我想用用户选择的两种类型之一填充。让我们称我的类(class)为 option1 和 option2
我想做的事情是这样的
class storage_class
{
public:
storage_class(int sel, int n)
{
if(sel == 1)
for(int i = 0; i < n; i++)
my_store.push_back(std::make_unique<option1>());
else if(sel == 2)
for(int i = 0; i < n; i++)
my_store.push_back(std::make_unique<option2>());
}
private:
// Something like this but that actually works
std::vector<T> my_store;
};
然后我想像这样使用它,或者类似的东西,所以不需要根据选择的选项修改这个用法。
int main()
{
storage_class store(1);
int n_iterations = 4;
for(int i = 0; i < n_iterations; i++)
{
store.my_store[i]->create_data();
}
}
类 option1 和 option2 将是数学模拟,它们将创建数据并将这些数据本身存储在作为类成员的 vector 中。
我想将任一选项的多个实例存储在一个 vector 中,然后从那里操作它们。我可以使用 C++17。
最佳答案
当您使用 c++17 时,您可以简单地使用 std::variant
作为容器的类型,容器本身可以保留您想要的所有类型。
例子:
class A { public: void Do() { std::cout << "A::Do" << std::endl; } };
class B { public: void Go() { std::cout << "B::Go" << std::endl; } };
template<class... Ts> struct funcs : Ts... { using Ts::operator()...; };
template<class... Ts> funcs(Ts...) -> funcs<Ts...>;
int main()
{
std::vector<std::variant<A,B>> vec;
vec.push_back(A{});
vec.push_back(B{});
for ( auto& el: vec)
{
std::visit( funcs{ [](A& a){ a.Do(); }, [](B& b) { b.Go(); } }, el);
}
}
输出:
A::Do
B::Go
这些类是完全独立的,可以使用 std::visit
简单地调用这些方法,并在此处传递一个可调用对象。我提供了一个简单的 funcs
实现,它只是收集所有可调用实体,以简化对此处不同不相关类的不同方法的调用的接口(interface)。
由于 std::variant
是某种标记 union ,它需要存储您使用的最大类型。如果这会浪费大量内存,您可以存储一个指向实例的指针,如果您需要内存管理方面的帮助,可以使用 std::unique_ptr
或 std::shared_ptr
;)
关于c++ - 不同类别的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52300657/
所以我有这个 UltraTicTacToe 游戏,我正在用 HTML/CSS/JS 编码。它由表中表中的表组成。当您单击 X 或 O 时,我想要突出显示您应该进入的下一个 TicTacToe 牌 ta
Some text Some more text 如何让每个 .example 的 .whatever 包含其 .test 的内容? 例如,如果代码是这样的: Som
我是一名优秀的程序员,十分优秀!