gpt4 book ai didi

C++:通过类型特征启用具有不同返回类型的函数

转载 作者:行者123 更新时间:2023-11-30 02:20:24 25 4
gpt4 key购买 nike

我有两个具有不同返回值的函数,我想在不使用宏或继承的情况下动态更改,应该使用哪个函数。

在下面的示例中,我想启用函数的整数变体并禁用 float 变体:

#include <iostream>
#include <type_traits>

constexpr bool int_en = true;

template<std::enable_if_t<int_en, bool> = false>
int test(void) noexcept {
return 10;
}

template<std::enable_if_t<!int_en, bool> = false>
float test(void) noexcept {
return 10.;
}

int main(void) {
std::cout << test();
}

我已经尝试了该程序的几种变体,即使使用 std::conditional 它也不起作用:

#include <iostream>
#include <type_traits>

constexpr bool int_en = true;
using ret_t = typename std::conditional<int_en, int, float>::type;

template<std::enable_if_t<std::is_same<int, ret_t>::value, bool> = false>
ret_t test(void) noexcept {
return 10;
}

template<std::enable_if_t<std::is_same<float, ret_t>::value, bool> = false>
ret_t test(void) noexcept {
return 10.;
}

int main(void) {
std::cout << test();
}

我总是得到同样的错误:

/usr/include/c++/7/type_traits: In substitution of ‘template<bool _Cond, class _Tp> using enable_if_t = typename std::enable_if::type [with bool _Cond = false; _Tp = bool]’:
tmp5.cpp:11:40: required from here
/usr/include/c++/7/type_traits:2476:61: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
using enable_if_t = typename enable_if<_Cond, _Tp>::type;

我应该怎么做才能让它发挥作用?我正在使用 g++7.3 和 C++17。

最佳答案

您可以使用 enable_if_t 来计算返回类型,如(它适用于 c++14,使用 enable_if 用于 c++11):

#include <iostream>
#include <type_traits>

constexpr bool int_en = true;

template <bool b = int_en>
std::enable_if_t<b, int>
test(void) noexcept {
return 10;
}

template <bool b = int_en>
std::enable_if_t<!b, float>
test(void) noexcept {
return 10.4;
}

int main(void) {
std::cout << test();
}

关于C++:通过类型特征启用具有不同返回类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49706986/

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