相关疑难解决方法(0)

为什么在year_month类中使用模板?

在 MSVC chrono 实现中我看到以下代码

    _EXPORT_STD template <int = 0>
_NODISCARD constexpr year_month operator+(const year_month& _Left, const months& _Right) noexcept {
    const auto _Mo  = static_cast<long long>(static_cast<unsigned int>(_Left.month())) + (_Right.count() - 1);
    const auto _Div = (_Mo >= 0 ? _Mo : _Mo - 11) / 12;
    return year_month{_Left.year() + years{_Div}, month{static_cast<unsigned int>(_Mo - _Div * 12 + 1)}};
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下为什么它使用带有未命名参数的模板吗?

c++ c++-chrono

22
推荐指数
1
解决办法
1440
查看次数

模板参数上的 C++ 函数模板重载

是否可以像这样重载函数模板(仅在使用 enable_if 的模板参数上):

template <class T, class = std::enable_if_t<std::is_arithmetic<T>::value>>
void fn(T t)
{

}
template <class T, class = std::enable_if_t<!std::is_arithmetic<T>::value>>
void fn(T t)
{

}
Run Code Online (Sandbox Code Playgroud)

如果条件enable_if不重叠?我的 MSVS 编译器抱怨说'void fn(T)' : function template has already been defined. 如果没有,有什么替代方法(理想情况下不要将enable_if其他任何地方放入模板参数中)?

c++ templates overloading

5
推荐指数
1
解决办法
986
查看次数

这是什么构造:template &lt;int&gt; void funcName(int i)?

我不小心在编写模板函数专业化时犯了一个错误,结果构造通过了 VS17 编译。(下面包含的代码中的第三个构造)

这是一个有效的构造吗?我该如何调用这个函数?

template <class T> void tempfunc(T t)
{
    cout << "Generic Template Version\n";
}

template <>
void tempfunc<int>(int i) {
    cout << "Template Specialization Version\n";
}

template <int> void tempfunc(int i)
{
    cout << "Coding Mistake Version\n";
}
Run Code Online (Sandbox Code Playgroud)

我无法调用第三个构造。

c++ template-specialization function-templates

2
推荐指数
1
解决办法
73
查看次数