gpt4 book ai didi

c++ - C++ 中的编译时条件成员函数调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:23:04 25 4
gpt4 key购买 nike

我有一个模板类,某些成员函数只有在模板参数满足某些条件时才有意义。例如,使用 std::enable_if<>我只能为这些情况定义它们,但我怎样才能有条件地调用它们呢?这是一个简单的例子

template<class T> class A
{
typename std::enable_if<std::is_floating_point<T>::value>::type a_member();
void another_member()
{
a_member(); // how to restrict this to allowed cases only?
}
};

最佳答案

首先,您不能那样使用 SFINAE - 模板类型参数需要在函数上,而不是在类上。

完整的解决方案如下所示:

template<class T> class A
{
private:
template <class S>
typename std::enable_if<std::is_floating_point<S>::value>::type a_member() {
std::cout << "Doing something";
}

template <class S>
typename std::enable_if<!std::is_floating_point<S>::value>::type a_member() {
//doing nothing
}

public:
void another_member()
{
a_member<T>();
}
};


int main() {
A<int> AInt;
AInt.another_member();//doesn't print anything

A<float> AFloat;
AFloat.another_member();//prints "Doing something"
}

关于c++ - C++ 中的编译时条件成员函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11363822/

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