无法转换参数 - 模板错误
Cannot convert argument - Template Error
我尝试使用模板实现访问者模式。
我的代码是:
struct some_class
{
char field1;
bool field2;
some_class()
: field1('a')
, field2(0)
{
}
};
struct unnamed_lambda
{
template<typename T>
T operator()(T x) const { return x + 1; }
};
struct unnamed_lambda2
{
template<typename T>
T operator()(T x) const { return x + 2; }
};
template<class processor>
void reflect(processor & p, some_class& sc)
{
reflect(p, sc.field1, "field1");
reflect(p, sc.field2, "field2");
}
template<class t>
void reflect(unnamed_lambda & p, t& val, string str)
{
cout << val << endl;
}
void print_helper()
{
unnamed_lambda lambda = unnamed_lambda{};
some_class sc;
reflect(lambda, sc);
}
template<class t>
void reflect2(unnamed_lambda2 & p, t& val, string str)
{
cout << val + 1 << endl;
}
void print_helper2()
{
unnamed_lambda2 lambda = unnamed_lambda2{};
some_class sc;
reflect(lambda, sc);
}
int main()
{
print_helper();
print_helper2();
return 0;
}
我想要一些定义其字段遍历顺序的类。就我而言,这是一个void reflect(processor & p, some_class& sc)
函数。此外,我想对这个类有一组操作。就我而言,这是print_helper
和print_helper2
.
为了关联操作和所需的操作,我创建了两个哑结构:unnamed_lambda
和unnamed_lambda2
。这些结构什么都不做。这是一种解决方法。
为什么这段代码闻起来这么难闻?这是有原因的。签名功能void reflect(processor & p, some_class& sc)
是固定的。
换句话说,除了更改此函数的签名及其实现之外,我可以做所有事情。更我不能改变some_class
类。
我一头雾水。我会很高兴对我的问题有任何帮助。
跳过中间步骤。您的访客应该只访问:
template<class processor>
void reflect(processor & p, some_class& sc)
{
p(sc.field1, "field1");
p(sc.field2, "field2");
}
访客可能是:
struct visitor {
template <typename T>
void operator()(T& field, const std::string& name) {
std::cout << "value of '" << name << "' = " << field << 'n';
}
};
some_class sc;
visitor v;
reflect(v, sc);
相关文章:
- 如何通过参数抛出错误消息
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 为什么 std::绑定错误参数可以成功?
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- g++ 为 transform() 的参数生成错误
- 如何在C++中使用 Void 而不会收到有关参数的错误
- 错误:参数中无效地使用了无效表达式
- xgboost 构建错误:参数包未扩展为"..":
- src/caffe/parallel.cpp:70:1:错误:“参数”未命名类型
- OpenCV 错误:ERClassifierNM1 中的错误参数
- 为什么显示错误:参数太少而无法正常工作
- 算法错误:参数无法从对中掩盖 1
- 类模板方法的专用化,类型名称是类模板 - 错误:参数处的类型/值不匹配
- C++连接函数错误-参数无效
- 错误:参数无效
- (自适应)opencv中的阈值错误(cvarrToMat中的错误参数(未知数组类型))
- OpenCV错误:cvGetSize中的错误参数(数组应该是CvMat或IplImage)
- OpenCV 2.2:未知函数中的错误参数,文件.. .ocv OpenCV modulescoresr
- 错误:参数声明的存储类说明符无效