我试图根据返回类型返回对数组中值的引用。我在某处读到c ++不支持使用返回类型进行重载,但可以使用专门的模板。
我尝试过但失败了..你能帮我弄清楚我做错了吗?
这是我认为应该:
uint16_t var_uint16[10];
float var_float[10];
template<class T>
T& Memory(int index) { }
template<>
uint16_t& Memory<uint16_t>(int index) { return var_uint16[index]; }
template<>
float& Memory<float>(int index) { return var_float[index]; }
并称之为:
float a = 10.0;
Memory(1) = a; // Should set var_float[1] to 10.0
上面的代码会产生以下错误:
no matching function for call to 'Memory(int)'
candidate is:
template<class T> T& Memory(int)
template argument deduction/substitution failed:
couldn't deduce template parameter 'T'
答案 0 :(得分:0)
您只能根据返回类型重载强制转换运算符。您可以使用overload =运算符来支持您的确切语义
struct Element {
operator uint16_t&()
{
return var_uint16[i];
}
operator float&()
{
return var_float[i];
}
template <typename T>
void operator=(T t)
{
T& val = *this;
val = t;
}
int i;
};
inline Element Memory(int i) { return Element{i}; }
float a = 10.0;
Memory(1) = a;
float& x = Memory(1);
x = 10.0