c ++函数在编译时返回类型

时间:2018-02-18 10:22:43

标签: c++ visual-studio-2015

我正在编写一些非模板c ++函数,其中当前函数的返回类型的标准标识符将允许代码

  1. 更具表现力
  2. 可以复制/粘贴到另一个具有不同返回类型但没有手动修改的函数
  3. 能够抵御对函数返回类型的简单修改
  4. 具体来说,我希望能够表达

    std::string Foo::bar()
    {
       /*?? what type here??*/ ret;
       ....
       return ret;
    }
    

    然后能够将函数体复制到具有不同名称的 ,其具有类似语义的不同返回类型。

    是否有标准或Visual Studio 2015特定的方法来执行此操作?

    我不相信https://msdn.microsoft.com/en-us/library/b0084kay.aspx的任何内容对我有帮助,因为函数分解周围的所有宏都表示为字符串文字。

1 个答案:

答案 0 :(得分:1)

起初我认为你应该使用decltype()

decltype(bar()) ret;

但后来我意识到你希望能够将代码复制粘贴到另一个名称可能不同的函数中。所以它不会起作用。

我认为一般来说没有解决方法。 __func__对您没有帮助,因为它是一个字符串,您无法调用它(decltype(__func__())无效)。

如果您只想返回默认构造的值,则可以始终执行此操作:

return {}; // or put some other constructor argument(s) inside {}