Test::load
应该将数据(按名称或索引描述)加载到传递的引用中。作为第三个参数,在加载失败的情况下有一个默认值(数据从文件加载)。
struct Test
{
template <typename ValueType, typename DefaultValueType>
void load(const char * c, ValueType & a, DefaultValueType b)
{
std::cout << "1";
}
template <typename ValueType, typename DefaultValueType>
void load(int i, ValueType & a, DefaultValueType b)
{
std::cout << "2";
}
};
我需要两者ValueType
,DefaultValueType
因为我特别需要字符串和自定义类型。当我想使用默认构造类型作为const char *
从 ValueType 推导出的默认第三个参数(在版本中)时,会出现问题。
template <typename ValueType, typename DefaultValueType>
void load(const char * c, ValueType & a, DefaultValueType b = ValueType())
{
std::cout << "1";
}
我收到expects 3 arguments
错误(vs2010)。
为什么它不起作用?我需要努力工作才能完成这项工作。
如果有人有兴趣玩,这里是完整的“工作”代码
#include <iostream>
struct Test
{
template <typename ValueType, typename DefaultValueType>
void load(const char * c, ValueType & a, DefaultValueType b/* = ValueType()*/)
{
std::cout << "1";
}
template <typename ValueType, typename DefaultValueType>
void load(int i, ValueType & a, DefaultValueType b)
{
std::cout << "2";
}
//Workaround
template<typename ValueType>
void load(const char * c, ValueType & v)
{
load(c,v,ValueType());
}
};
int main()
{
Test t;
float f;
//This is standard behavior
t.load("bar", f, 0.0f);
//I want this to be possible call
t.load("bar", f);
}