这是对这个(更一般的)问题的跟进:previous question。此处给出了对当前问题的部分答案:对当前问题的部分答案。
我对基于模板参数的返回类型的显式特化感兴趣。虽然上面给出的答案提供了问题的解决方案,但我相信有一种更优雅的方法可以使用 C++11/14 技术解决问题:
template<int N> auto getOutputPort2();
template<> auto getOutputPort2<0>();
template<> auto getOutputPort2<1>();
template<>
auto getOutputPort2<0>()
{
return std::unique_ptr<int>(new int(10));
}
template<>
auto getOutputPort2<1>()
{
return std::unique_ptr<string>(new string("asdf"));
}
上面的代码使用 gcc 4.8.3(带有 -std=c++0x 标志)按预期编译和工作。但是,它会发出以下警告:
getOutputPort2
函数使用auto
没有尾随返回类型的类型说明符。
据我了解,这将成为 C++14 标准的一部分。但是,有没有办法在 C++11 中实现上述功能?可以decltype
在这里使用吗?
编辑。在下面的评论之后,我还想问一个额外的问题。从 C++14 标准的角度来看,上面的代码是否有效?如果不是,为什么不呢?