【发布时间】:2018-06-06 08:47:21
【问题描述】:
我正在尝试为 Eigen 类型编写一些具有模板专业化的函数,遵循这个问题:Eigen: type deduction in template specialization of base-class
这是我写的:
#include <type_traits>
#include <Eigen/Core>
namespace isEigenPlainObjectBaseDetail {
template <typename T>
std::true_type test(const Eigen::PlainObjectBase<T>);
std::false_type test(...);
}
template <typename T>
struct isEigenPlainObjectBase :
public decltype(isEigenPlainObjectBaseDetail::test(std::declval<T>())) {};
template <typename T, typename Enable = void>
void foo(T& obj) {
std::cout << "Generic Called!\n";
}
template <typename T, typename std::enable_if<isEigenPlainObjectBase<T>::value>::type>
void foo(T& obj) {
std::cout << "Eigen Specialization Called!";
}
int main() {
Eigen::MatrixXd m;
Eigen::VectorXd v;
int i = 0;
foo(i);
foo(m);
foo(v);
return 0;
}
但这每次都会调用泛型函数:
Generic Called!
Generic Called!
Generic Called!
我做错了什么?如何为具有特征矩阵和向量的函数编写模板特化?
【问题讨论】:
标签: c++ c++11 templates eigen sfinae