是否可以使用宏来创建模板类的变量并生成代码,然后将创建的变量添加到使用
std::vector
的 std::variant
中?
考虑这个例子:
THE_MACRO(Foo<int, int, int>, 1);
THE_MACRO(Foo<int, int, int>, 2);
// Wanted outcome:
auto foo1 = std::make_shared<Foo<int, int, int>>(Foo<int, int, int>());
auto foo2 = std::make_shared<Foo<int, int>>(Foo<int, int>());
std::vector<std::variant<decltype(foo1), decltype(foo1)>> objects;
或者宏通常无法处理输入数据类型?
您不需要在现代 C++ 中使用宏,因为您可以编写
constexpr
可变参数函数模板,如下所示:
template<typename... T>
constexpr auto make_foo()
{
return std::make_shared<Foo<T...>>();
}
auto foo1 = make_foo<int, int, int>();
auto foo2 = make_foo<int, int>();