gpt4 book ai didi

c++ - 通过使用特征在模板类的编译时抛出错误来禁用函数

转载 作者:太空狗 更新时间:2023-10-29 19:40:27 25 4
gpt4 key购买 nike

我有一个类,我们称它为Foo有几种方法:

template<typename T>
class Foo {
public:
Foo() { /* ... */ }
bool do_something() { /* ... */ }

// This method should be callable only if:
// std::is_floating_point<T>::value == true
void bar() {
// Do stuff that is impossible with integer
}
};

我希望能够同时构建 Foo<double>Foo<int>但我不想允许调用 bar()当类型 T 不是浮点类型时。我还希望在编译时而不是在运行时生成错误。所以,我想要的是:

Foo<double> a;
a.bar(); // OK
Foo<int> b;
bool res = b.do_something(); // OK
b.bar(); // WRONG: compile error

我用 enable_if 尝试了很多东西(有类似 thisthis one 的帖子)但我不能再使用 int输入 Foo .例如:

typename std::enable_if<std::is_floating_point<T>::value>::type
bar() { /* ... */ }

main.cpp:112:28: required from here
foo.h:336:5: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
bar() {

如何限制 bar() 的使用?到浮点类型但允许整数类型在其他地方使用?

最佳答案

void bar() { 
static_assert(std::is_floating_point<T>::value,
"this method can only be called for floating-point Foos!");
// do stuff
}

关于c++ - 通过使用特征在模板类的编译时抛出错误来禁用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23572856/

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