gpt4 book ai didi

c++ - enable_if 如何用于删除代码

转载 作者:行者123 更新时间:2023-11-28 05:23:26 26 4
gpt4 key购买 nike

我正在使用 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 失败了。

最佳答案

std::enable_if<>是一个有效的类型;你需要使用它的 type SFINAE 成员:

template<typename T>
typename std::enable_if<is_ring_field<T>::value,int>::type RankMat(T const& Input)
{
return 10;
}

template<typename T>
typename std::enable_if<(not is_ring_field<T>::value),int>::type RankMat(T const& Input)
{
return 20;
}

关于c++ - enable_if 如何用于删除代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41019992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com