ファイルパスを取るコンストラクターを持つすべてのクラスがあります。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]) };
しかし、それはあまり一般的な解決策ではありません。