我需要为模板化的加法运算符捕获调用者源代码行。下面的代码在没有模板的情况下工作正常,但在使用模板时会抱怨依赖类型。
我正在寻找可以让我执行下面的简单添加操作并在C ++中报告调用者源代码行的任何变通方法或黑客。
#include <iostream>
template <unsigned N>
class widget {
int data_;
public:
class proxy {
public:
proxy(widget &a, int l = __builtin_LINE()) : a(a), l(l) {}
widget &a;
int l;
};
widget(int data) : data_(data << N) {}
template <unsigned M>
widget operator+(const typename widget<M>::proxy &other) {
std::cout << "operator+ called at line " << other.l << std::endl;
return widget((data_ >> N) + (other.a.data_ >> M));
}
};
int main() {
widget<2> x(5);
widget<3> y(6);
auto z = x + y;
return 0;
}
编译器错误:&#34;模板参数推断/替换失败&#34;