【发布时间】:2016-12-07 14:27:50
【问题描述】:
我正在使用 enable_if 语句来删除考虑中的可能方法。
#include "gmpxx.h"
#include <iostream>
template <typename T>
struct is_ring_field {
};
template <>
struct is_ring_field<int> {
static const bool value = false;
};
template <>
struct is_ring_field<mpq_class> {
static const bool value = true;
};
template<typename T>
std::enable_if<is_ring_field<T>::value,int> RankMat(T const& Input)
{
return 10;
}
template<typename T>
std::enable_if<(not is_ring_field<T>::value),int> RankMat(T const& Input)
{
return 20;
}
int main()
{
int M1=10;
mpq_class M2=3;
std::cerr << "FICT rank(M1)=" << RankMat(M1) << "\n";
std::cerr << "FICT rank(M2)=" << RankMat(M2) << "\n";
}
最终目标是拥有根据输入的代数数据类型而变化的方法。对于其他特征,它对我有用,但不是这个。在这种情况下,编译器奇怪地说调用不明确,换句话说,std::enable_if 失败了。
【问题讨论】:
-
查看
RankMat的两个重载。重载的哪一部分不同?该部分是否可以是函数中唯一不同于有效重载的部分? -
你没有忘记
typename std::enable_if<*,*>::type吗? -
是的,我是在写完信息后才知道的,对此感到抱歉。来自 clang++ 和 g++ 的消息都没有帮助。
标签: c++ c++11 template-meta-programming enable-if