我需要为任意元组中的每个元素调用 - template或overloaded函数.确切地说,我需要在元组中指定元素,因为它们在元组中指定.
例如.我有一个元组std::tuple<int, float> t{1, 2.0f};和一个功能
class Lambda{
public:
template<class T>
void operator()(T arg){ std::cout << arg << "; "; }
};
Run Code Online (Sandbox Code Playgroud)
我需要一些结构/函数Apply,如果调用它Apply<Lambda, int, float>()(Lambda(), t)会产生:
1; 2.0f;
Run Code Online (Sandbox Code Playgroud)
而不是2.0f; 1;.
请注意,我知道解决方案,如果将"原始"参数包传递给函数,并且我知道如何以相反的顺序对元组执行此操作.但是以下部分特化的尝试Apply失败了:
template<class Func, size_t index, class ...Components>
class ForwardsApplicator{
public:
void operator()(Func func, const std::tuple<Components...>& t){
func(std::get<index>(t));
ForwardsApplicator<Func, index + 1, Components...>()(func, t);
}
};
template<class Func, class... Components>
class ForwardsApplicator < Func, sizeof...(Components), Components... > {
public:
void …Run Code Online (Sandbox Code Playgroud)