0
タプル付きテンプレートクラスを設計したいタプルを返すラムダ関数をとるクラスのapply()メンバ関数を用意します。 ラムダの戻りタプルの型は、テンプレートクラスの型リストと互換性がある必要があります。しかし、それはコンパイルできません。バリアント型テンプレートクラスのmermber関数にパラメータとしてラムダ式を渡す方法
main.cpp: In function ‘int main()’:
warning: lambda templates are only available with -std=c++14 or -std=gnu++14
auto getTuple = []<typename ... Param, typename ... Types>(const Param & ..
^
main.cpp: In lambda function:
main.cpp:75:32: error: parameter packs not expanded with ‘...’:
std::tuple<Types> items = std::tuple<Types>(p...);
^
main.cpp:75:32: note: ‘Types’
main.cpp:19:43: error: invalid use of ‘auto’
std::tuple<Types...> t = getTuple(param...);
#include <iostream>
#include <tuple>
#include <string>
#include <type_traits>
#include <array>
template <typename... Types>
class Data
{
public:
template<typename ... Param, typename Functor>
std::tuple<Types...> apply(Functor getTuple, const Param& ... param)
{
std::tuple<Types...> t = getTuple(param...);
return t;
}
};
int main()
{
Data<std::string, int,double> data1;
auto getTuple = []<typename ... Param, typename ... Types>(const Param & ... p)
{
std::tuple<Types> items = std::tuple<Types>(p...);
return items;
};
const auto t = data1.apply(getTuple , "hello", 3,1.9);
return 0;
}
はどうもありがとうございました!これはC++ 14で動作します! – Wayne