[英]C++ deduce template function return type to be called implicitly
我使用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>();
您可以在MyBuffer
添加構造MyBuffer
來為您進行轉換
template <std::size_t N>
class MyBuffer
{
public:
MyBuffer(const MyBuffer&) = default;
template <std::size_t M>
/* explicit */ MyBuffer(const MyBuffer<M>& rhs) : MyBuffer(rhs.data()) {}
// ...
};
接着
MyBuffer<10> buf = "1234567890";
const MyBuffer<10>& getVal() { return buf; }
和
MyBuffer<5> fiveChars = getVal();
MyBuffer<10> tenChars = getVal();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.