我使用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>();

09-06 19:51