使用编译时类型和 运行 时函数创建 std::tuple
create std::tuple using compile-time types and a run-time function
我正在尝试构建(在运行时)一个类型在编译时已知的元组。
我认为我已经很接近了:
#include <tuple>
// This is defined elsewhere
template<typename T>
T* create_obj();
template<typename ...Ts>
auto create_tuple()
{
std::tuple_cat(
(std::make_tuple( create_obj<std::tuple_element<Idx, Ts...>() ), ...) // Idx?
);
}
示例用法可能是:
struct A{};
struct B{};
struct C{};
std::tuple<A*, B*, C*> = create_tuple<A, B, C>();
我对如何在编译时迭代 Idx 感到困惑...也许 std::index_sequence?
我不确定我是否正确理解了问题,因为我不明白你为什么要迭代Idx
,为什么要使用tuple_element
或tuple_cat
。我想你只想调用 make_tuple
到 return 一个元组,其元素是通过 create_obj
:
创建的
#include <tuple>
template<typename T>
T* create_obj() { return new T{};}
template<typename ...Ts>
auto create_tuple()
{
return std::make_tuple( create_obj<Ts>() ...);
}
struct A{};
struct B{};
struct C{};
int main() {
std::tuple<A*, B*, C*> a = create_tuple<A, B, C>();
}
我正在尝试构建(在运行时)一个类型在编译时已知的元组。 我认为我已经很接近了:
#include <tuple>
// This is defined elsewhere
template<typename T>
T* create_obj();
template<typename ...Ts>
auto create_tuple()
{
std::tuple_cat(
(std::make_tuple( create_obj<std::tuple_element<Idx, Ts...>() ), ...) // Idx?
);
}
示例用法可能是:
struct A{};
struct B{};
struct C{};
std::tuple<A*, B*, C*> = create_tuple<A, B, C>();
我对如何在编译时迭代 Idx 感到困惑...也许 std::index_sequence?
我不确定我是否正确理解了问题,因为我不明白你为什么要迭代Idx
,为什么要使用tuple_element
或tuple_cat
。我想你只想调用 make_tuple
到 return 一个元组,其元素是通过 create_obj
:
#include <tuple>
template<typename T>
T* create_obj() { return new T{};}
template<typename ...Ts>
auto create_tuple()
{
return std::make_tuple( create_obj<Ts>() ...);
}
struct A{};
struct B{};
struct C{};
int main() {
std::tuple<A*, B*, C*> a = create_tuple<A, B, C>();
}