繁体   English   中英

使用编译时类型和运行时创建 std::tuple function

[英]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_elementtuple_cat 我认为您只想调用make_tuple返回一个元组,其元素是通过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>();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM