gpt4 book ai didi

C++11 - enable_if - 类定义之外的函数实现

转载 作者:太空狗 更新时间:2023-10-29 21:13:35 24 4
gpt4 key购买 nike

如何使用具有 enable_if 的模板实现功能?

class Test
{
public:
Test(){}
~Test(){}

template<typename T, typename std::enable_if<std::is_integral<T>::value>::type>
void do_something(T v);

template<typename T, typename std::enable_if<std::is_floating_point<T>::value>::type>
void do_something(T v);

};

如何在类定义之外(即在内联文件中)为不同类型实现do_something

最佳答案

您在返回类型上使用 enable_if。这在 cppreference 上有描述:

A common mistake is to declare two function templates that differ only in their default template arguments. This is illegal because default template arguments are not part of function template's signature, and declaring two different function templates with the same signature is illegal.

#include <iostream>
#include <type_traits>

class Test
{
public:
Test(){}
~Test(){}

template<typename T>
typename std::enable_if<std::is_integral<T>::value, void>::type
do_something(T v);

template<typename T>
typename std::enable_if<std::is_floating_point<T>::value, void>::type
do_something(T v);

};

template<typename T>
typename std::enable_if<std::is_integral<T>::value, void>::type
Test::do_something(T v) { std::cout << "Integral\n"; }

template<typename T>
typename std::enable_if<std::is_floating_point<T>::value, void>::type
Test::do_something(T v) { std::cout << "Floating point\n"; }


int main()
{
Test t;
t.do_something(1);
t.do_something(3.14);
}

关于C++11 - enable_if - 类定义之外的函数实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43694316/

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