C++甚至更通用的运算符模板

标签 c++ templates operators

所以我刚刚学习了(感谢大家)有关 decltype 的知识。我现在可以编写非常好的 vector 模板,实际上优于 valarrays(!):

template <typename T, typename U>
vector<decltype(T()*U())> operator*(const vector<T>& A, const vector<U>& B){
  vector<decltype(T()*U())> C = vector<decltype(T()*U())>(A.size());
  typename vector<T>::const_iterator a = A.begin();
  typename vector<U>::const_iterator b = B.begin();
  typename vector<decltype(T()*U())>::iterator c = C.begin();
  while (a!=A.end()){
    *c = (*a) + (*b);
    a++; b++; c++;
  }
  return C;
}  

在我们允许运算符(“*”)本身成为模板参数的意义上,是否有可能使这种模板更加“元”? IE。有一个适用于 *、+、% 等的单一模板定义,其中在 *c = (*a) op (*b) 中使用适当的运算符 op?

我敢打赌它不是,但它会很好!

最佳答案

如您所料,答案是否定的。 :)

但是,您可以使用预处理器生成这样的函数:

#define OPERATOR_BLOB(optype) \
    vector<…> operator optype (…) { … }

OPERATOR_BLOB(*)
OPERATOR_BLOB(+)
…

关于C++甚至更通用的运算符模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7555255/

相关文章:

c++ - 您可以使用运行时指定的变量调用编译时实例化模板函数吗?

c++ - Functor 类在构造函数中工作

c++ - Matrix 中没有 'operator *' 的匹配运算符

c++ - 在 C++ lambda 函数中捕获成员变量

c++ - MSVC 与 GCC : variable declaration in function

c - '&&' 和 '||' 是在运算符优先级的同一行还是不同的行?

java - ^= 在 Java 中是什么意思?

c - 乘法在 for 循环中不能很好地工作

c++ - 如何避免使用 Try Catch (C++) 在整数值中输入字符串

c++ - 在vs2012中 move 一个字符串