当你在MFC,C++CLI,C++模板元编程中,经常要切换C++编译器的版本,在Visual Studio中,如果确定C++编译器的版本,应该如何做,还是直接上代码吧:
#if _c_version_ > _c_14_
//C++17 mf::Accumulate<1, 3, 4, 7>() //是函数,加括号
//C++14 mf::Accumulate<1, 3, 4, 7>
/// <summary>
/// 元函数,求和 例子:mf::Accumulate<1, 3, 4, 7>();
/// </summary>
/// <typeparam name="...values"></typeparam>
/// <returns></returns>
/// 创建时间:2024-01-24 抄自:《动手打造深度学习框架》 23页
template<size_t... values>
constexpr size_t Accumulate()
{
return (0 + ... + values);
}
#else
/// <summary>
/// 元函数,求和 例子:mf::Accumulate<1, 3, 4, 7>;
/// </summary>
/// <typeparam name="...Inputs"></typeparam>
/// 创建时间:2024-01-24 抄自:《动手打造深度学习框架》 22页
template<size_t...Inputs>
constexpr size_t Accumulate = 0; //用于终止循环的分支
template<size_t CurInput, size_t...Inputs>
constexpr size_t Accumulate<CurInput, Inputs...> = CurInput + Accumulate<Inputs...>;
#endif
上面的元函数代码,一个是适用于C++14,一个是C++14以上的编译器版本:
现在,你可以在IOS C++14,17 、20之间自由切换,或在VC ,MinGW/GCC,操作系统Windows或Linux平台中进行各种切换。