我使用C++ 0X。
我有一个带有模板返回类型的模板函数:
MyBuffer<10> buf = "1234567890";
template< class T >
T getVal();
template<>
MyBuffer<5> getVal<MyBuffer<5>>()
{
return MyBuffer<5>(buf.data());
}
template<>
MyBuffer<10> getVal<MyBuffer<10>>()
{
return buf;
}
因此,在一种情况下,它会在5秒内返回5个符号。
我可以通过以下方式使用它:
MyBuffer<5> fiveChars = getVal<MyBuffer<5>>();
MyBuffer<10> tenChars = getVal<MyBuffer<10>>();
但我想知道:例如,我可以通过以下方式简化通话:
MyBuffer<5> fiveChars = getVal();
MyBuffer<10> tenChars = getVal();
当然我有编译器错误。
所以我的问题是:
是否可以以某种方式声明我的模板以使用最后一个代码片段?我没有指定getVal模板类型,但是编译器应该看到,我将其分配给有模板专用化的具体类型。
最佳答案
首先,您不能从C++的返回类型中推断出任何模板参数。
如果要减少代码量,我建议使用某种包装器:
template<int n>
MyBuffer<n> get()
{
return getVal<MyBuffer<n>>();
}
而不是:
MyBuffer<5> fiveChars = getVal<MyBuffer<5>>();
只需使用:
auto fiveChars = get<5>();
auto tenChars = get<10>();