gpt4 book ai didi

c++ - 当构造函数具有相同的参数类型(文件路径)时如何从数组创建(初始化)std::tuple

转载 作者:搜寻专家 更新时间:2023-10-31 01:12:04 26 4
gpt4 key购买 nike

我有一些类都有一个采用文件路径的构造函数。我想从 main 函数中的 argv 参数创建它们的 std::tuple 。这是草图

class A { 
public:
A(const char *); // Taking a file path
};

class B {
public:
B(const char *); // Taking a file path
};

int main(int argc, char* argv[]) {
auto tup(myCreateTuple<A, B, A>(argc, argv));
// myCreateTuple would in this case use argv[1], argv[2]
// and argv[3] to create A(argv[1]), B(argv[2]) and A(argv[3]).
// argc is just passed along to verify that argv is long enough.
// tup would have of the type std::tuple<A ,B, A>
}

创建元组成员的顺序并不重要(即允许未定义构造函数的执行顺序)。您知道如何实现 myCreateTuple 吗?

我想可以一起避免使用 myCreateTuple 而是使用

std::tuple<A, B, A> tup{ A(argv[1]), B(argv[2]), A(argv[3]) };

但这不是一个通用的解决方案。

最佳答案

使用 <redi/index_tuple.h> 提供编译时整数序列,在包扩展中生成数组索引:

#include <tuple>
#include <assert.h>
#include <redi/index_tuple.h>

template<typename... T, unsigned... I>
inline std::tuple<T...>
myCreateTuple_impl(char** argv, redi::index_tuple<I...>)
{
return std::tuple<T...>(argv[I+1]...);
}

template<typename... T>
inline std::tuple<T...>
myCreateTuple(int argc, char** argv)
{
assert(argc > sizeof...(T));
return myCreateTuple_impl<T...>(argv, redi::to_index_tuple<T...>());
}

关于c++ - 当构造函数具有相同的参数类型(文件路径)时如何从数组创建(初始化)std::tuple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14089993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com