簡體   English   中英

C ++推導模板函數的返回類型被隱式調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM