小编M Z*_*nyi的帖子

模板的类型转换

我有一个包装类模板,并希望隐式转换为包装类型,以便使用现有的库函数:

#include <complex>

double f(double x) { return 1.; }

template <typename T>
std::complex<T> f(std::complex<T> x) { return std::complex<T>(); }

template <typename T>
class A {
  T _x;
public:
  A(const T& x) : _x(x) {}
  operator T() { return _x; }
};

int main() {
  A<double> da(1.);
  A<std::complex<double>> ca({1.,1.});
  f(da); // OK                                                                                                                  
  f(ca); // error                                                                                                               
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

在f(std::complex<T>)不使用f(ca),因为模板参数推导过程中的隐式转换不考虑(查看生成的错误味精.这里).

在实际代码f(...)中,库函数例如从<complex>头部替换,因此不能修改.

如果我继承A从T(由错误消息作为所建议的),然后f(ca)编译.但是A没有为内置类型定义(你不能从它们继承).此外,将给予的所有功能complex<double> …

c++ templates type-conversion

8
推荐指数
1
解决办法
139
查看次数

标签 统计

c++ ×1

templates ×1

type-conversion ×1