c++ - 模板函数中具有单个可选参数和默认值的函数

标签 c++ templates boost c++14

我想要一个只有 1 个参数的函数,该参数对于泛型类型是可选的,并且已指定 boost::none 作为默认值。这可能吗?

#include <iostream>
#include <string>
#include <boost/optional.hpp>

template <typename T>
void f(boost::optional<T> v = boost::none)
{
    if (v)
    {
        std::cout<<"v has value: " << v.get();
    }
    else
    {
        std::cout<<"v has no value!";
    }
}

int main()
{
   f(12);
   f("string");
   return 0;
}

最佳答案

是的,这是可能的,但它不能与模板推导一起使用( f(12) 将尝试实例化 f<int&&> ,它不存在)。当您这样调用时,您的代码将编译:

f(boost::optional<int>{12});

或显式实例化它:

f<int>(12);

关于c++ - 模板函数中具有单个可选参数和默认值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71235171/

相关文章:

c++ - dgesv 中的舍入错误?

c++ - 编译器自动确定构造函数初始化列表?

c++ - 无法更改存储在二维数组中的结构成员

c++ - 将 bool 标志更改为模板参数

css - 好奇的 '-' 和现场时出现的空间

c++ - 基于DCT的视频编码过程

c++ - 类与其基类之间有哪些可检测到的差异?

c++ - ICU C++ 转换编码

c++ - boost::none_t 实现的基本原理是什么?

C++ boost 线程在 MFC 中锁定 GUI 线程