我正在使用enable_if語句來刪除可能的方法。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'的兩個重載。過載的哪些部分有所不同?該部分可以作爲函數的唯一部分,它不同於一個有效的重載? – NathanOliver
你不忘記'typename std :: enable_if <*,*> :: type'? –
是的,我在寫完信息後發現,對此感到抱歉。來自clang ++和g ++的消息都沒有幫助。 –