【发布时间】:2016-10-22 04:14:07
【问题描述】:
我的问题是关于如何定义成员函数 f1 以使代码工作
#include <iostream>
struct func2{
int a=3;
template<typename T1, typename T2, typename T3>
void f1(T1 _t1, T2 _t2, T3 _t3){
std::cout<<a<<"\t"<<_t1<<"\t"<<_t2<<"\t"<<_t3<<std::endl;
}
template<typename F1, typename T1, typename T2, typename T3>
void f2(F1 _f1, T1 _t1, T2 _t2, T3 _t3){
_f1(_t1, _t2, _t3);
_f1(_t2, _t1, _t3);
_f1(_t3, _t2, _t1);
}
void f3(){
int a =1;
double b = 2.0;
std::string c = "hello";
f2(f1,a,b,c);
};
};
int main(){
func2().f3();
}
或者,也许我还需要更改 f2 和 F1。但是,要求保持 f3 原样,因为我可以稍后使用 f2(f1_another,a,b,c),而不是移动 f1 和 f2 脱离了 func2,因为它们依赖于 a。该代码只是我现在面临的问题的一个简单模型。欢迎任何建议或参考。非常感谢。
【问题讨论】:
-
f2([this](auto&&... t){ f1(decltype(t)(t)...); },a,b,c); -
添加std::forward不是更好吗?但不确定语法:
std::forward<decltype(t)>(t)... -
虽然您无法捕获多个重载(当然没有 lambda),但您可以将 std::any 或 ... 作为参数,或者传入排列。
标签: c++ templates c++11 inheritance c++14