如何使用宏来实例化模板类?

问题描述 投票:0回答:1

是否可以使用宏来创建模板类的变量并生成代码,然后将创建的变量添加到使用

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++ macros variadic-macros c++-templates
1个回答
0
投票

您不需要在现代 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>();


工作演示

© www.soinside.com 2019 - 2024. All rights reserved.