2016-05-20 17 views
4

我想知道在C++中是否有一个宏或语言元素表示与函数中的返回值相同的类型。简化命名类型(特别是在函数声明中)的C++语言功能

例如:

std::vector<int> Myclass::CountToThree() const 
{ 
    std::vector<int> col; 
    col.push_back(1); 
    col.push_back(2); 
    col.push_back(3); 
    return col; 
} 

取而代之线std::vector<int> col;的是有某种形式的语言元素的? 我知道这很平凡,但我只是无聊打字;-)。

+1

如果你对输入长类型名称感到无聊,比如'使用vi = std :: vector ',然后输入'vi col;',你可以使用'typedef'或'using'。 – delta

+2

您有几种选择可以避免重复变量的实际类型。我的建议是你不使用他们中的任何一个:-) –

回答

6

你可以做两件事情:

  1. Type aliasing,无论是usingtypedef

    typedef std::vector<int> IntVector; 
    using IntVector = std::vector<int>; 
    

    这两个声明是等价的,并提供编译器视为原始名称的同义词的另一个名称。它也可以用于模板。

    为什么两个符号,不只是一个?在C++ 11 to simplify notation for typedefs in templates中提供了using关键字。

  2. 在C++ 14,你可以使用auto关键字自动返回类型推演:

    auto Myclass::CountToThree() const 
    { 
        std::vector<int> col; 
        col.push_back(1); 
        col.push_back(2); 
        col.push_back(3); 
        return col; 
    } 
    

    对于更广泛的解释见this related question

2

对于你的榜样,你可以只写

std::vector<int> Myclass::CountToThree() const 
{ 
    return {1,2,3}; 
} 

在一般情况下,你可以用decltype得到一个函数的返回类型,但是这可能不会在您的情况帮:

std::vector<int> Myclass::CountToThree() const 
{ 
    decltype(CountToThree()) col; 
    col.push_back(1); 
    col.push_back(2); 
    col.push_back(3); 
    return col; 
}