use*_*462 3 c++ templates boost types
我正在编写一个负责格式化和打印信息的方法.
有一个问题/功能boost::optional<T>,当输出到流时,只有当有值时才会输出额外的空格optional.
我可以看到两个选项:
boost::optional<T>boost::optional<T>并相应地处理它选项1可能是这样的:
template <typename T>
void print(const T& o)
{
std::cout << o << "\n";
}
template <typename T>
void print_optional(const boost::optional<T>& o)
{
if (o)
print(*o);
else
print("--");
}
Run Code Online (Sandbox Code Playgroud)
它有效,但它有一个问题,如果我们调用print()一个没有编译错误boost::optional.我知道static_assert并且std::is_type,但由于boost::optional本身是模板化的,我不知道如何检查它.
选项2对我来说是理想的,但问题仍然存在:如何询问代码变量boost::optional<T>是否与T无关?
你可以重载print函数:
template <typename T>
void print(const T& o)
{
std::cout << o << "\n";
}
template <typename T>
void print(const boost::optional<T>& o)
{
if (o)
print(*o);
else
print("--");
}
Run Code Online (Sandbox Code Playgroud)
如果传递a boost::optional,这将正确选择第二个重载,否则将首先重载.
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |