gpt4 book ai didi

c++ - 基于 bool 模板参数的启用方法

转载 作者:可可西里 更新时间:2023-11-01 18:28:05 25 4
gpt4 key购买 nike

我想实现一个基于 bool 模板参数的私有(private)函数。类似的东西:

#include <iostream>

using namespace std;

template <bool is_enabled = true>
class Aggregator {
public:
void fun(int a) {
funInternal(a);
}

private:
void funInternal(int a, typename std::enable_if<is_enabled>::type* = 0) {
std::cout << "Feature is enabled!" << std::endl;
}

void funInternal(int a, typename std::enable_if<!is_enabled>::type* = 0) {
std::cout << "Feature is disabled!" << std::endl;
}
};

int main()
{
Aggregator<true> a1;
Aggregator<false> a2;

a1.fun(5);
a2.fun(5);

return 0;
}

但上面的程序无法编译:错误:'struct std::enable_if' void funInternal(int a, typename std::enable_if::type* = 0) 中没有名为'type'的类型。

是否可以使用 enable_if 实现所需的行为?

最佳答案

以下是对 http://coliru.stacked-crooked.com/a/480dd15245cdbb6f 提供的解决方案 ( @chris ) 的改编。在评论中,这似乎满足您的需求。

#include <iostream>

template<bool is_enabled = true>
class Aggregator
{
public:
void fun(int a)
{
funInternal(a);
}

private:
template<bool enabled = is_enabled>
void funInternal(typename std::enable_if<enabled, int>::type a)
{
std::cout << "Feature is enabled!" << std::endl;
}

template<bool enabled = is_enabled>
void funInternal(typename std::enable_if<!enabled, int>::type a)
{
std::cout << "Feature is disabled!" << std::endl;
}
};

int main()
{
Aggregator<true> a1;
Aggregator<false> a2;

a1.fun(5);
a2.fun(5);

return 0;
}

关于c++ - 基于 bool 模板参数的启用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29001599/

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