使用模板参数推导捕获调用者源代码行

时间:2018-06-15 15:17:15

标签: reflection proxy template-specialization type-deduction

我需要为模板化的加法运算符捕获调用者源代码行。下面的代码在没有模板的情况下工作正常,但在使用模板时会抱怨依赖类型。

我正在寻找可以让我执行下面的简单添加操作并在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;

0 个答案:

没有答案