Мне интересно, есть ли простой способ вывести std::string
из const char*
при создании кортежа.
Это было бы возможно с моей собственной реализацией кортежа, но мне интересно, возможно ли это с std::tuple
Например, в приведенном ниже коде storage_
будет иметь тип:
std::tuple<int, int, const char*>
std::tuple<const char*, char*>
Я хотел бы получить:
std::tuple<int, int, std::string>
std::tuple<std::string, std::string>
#include <tuple>
#include <string>
#include <string.h>
template<typename T>
class foo
{
public:
foo(T storage) : storage_(std::move(storage)) {}
private:
T storage_;
};
int main()
{
char* s2 = strdup("123");
foo f { std::make_tuple(12,123,"1234") };
foo f2 { std::make_tuple("321", s2) };
free(s2);
// still want to keep s2 stored in f2
}
Я знаю, что могу написать std::tuple<int,std::string> t1 = std::make_tuple(123,"12");
, но это не решает мою проблему, так как я хочу, чтобы любое количество аргументов передавалось в любом порядке
Решение: https://wandbox.org/permlink/MsUxZ18SYD1K2ujv