Как получить доступ к аргументам внутри структуры?
Мне нужно получить аргументы внутри конструктора. Можно ли записать их в массив и потом с ними работать?
struct prototype {
template <class... T1>
prototype(T1 ...args) {
std::cout << "test" << std::endl;
// Это так не работает
std::cout << "args[0]" << std::endl;
std::cout << "args[1]" << std::endl;
// Где они хранятся, не могу понять?
}
};
int option_1 = 10;
std::string option_2 = "test2";
std::vector<int> option_3(10);
auto option_4 = 0.41;
int main() {
prototype(option_1, option_2, option_3, option_4);
prototype(option_1, option_2);
system("pause");
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну, например, так устроит?...
#include <vector>
#include <string>
#include <iostream>
#include <any>
using namespace std;
struct prototype
{
vector<any> p;
template <class... T1>
prototype(T1 ...args)
{
(p.push_back(args), ...);
std::cout << "test" << std::endl;
}
};
int option_1 = 10;
std::string option_2 = "test2";
std::vector<int> option_3(10);
auto option_4 = 0.41;
int main() {
prototype p1(option_1, option_2, option_3, option_4);
prototype p2(option_1, option_2);
cout << any_cast<double>(p1.p[3]) << endl;
cout << any_cast<string>(p2.p[1]) << endl;
}
Или как вариант:
struct prototype
{
template <class... T1>
prototype(T1 ...args)
{
auto p = forward_as_tuple(args...);
cout << get<0>(p) << endl;
if constexpr(tuple_size_v<decltype(p)> >= 3 )
{
cout << get<3>(p) << endl;
}
}
};
int option_1 = 10;
std::string option_2 = "test2";
std::vector<int> option_3(10);
auto option_4 = 0.41;
int main() {
prototype p1(option_1, option_2, option_3, option_4);
prototype p2(option_1, option_2);
}
Да, к вашему
Где они хранятся, не могу понять?
Пока не сохраните сами — нигде, потому что все эти разборки выполняются во время компиляции, а не во время выполнения.