可以编写一个接受类型并返回不同类型的函数

时间:2011-07-04 21:13:28

标签: c++ c++11

是否可以编写一个接受类型并返回(相关)类型的函数。例如,一个函数采用一个名为“RandomVariable”的类型并返回一个名为“RandomVariableCovariance”的类型。我猜一般来说问题是类型名是否可以是参数或返回类型。 C ++ 0x很好。

4 个答案:

答案 0 :(得分:11)

您无法使用函数执行此操作,但可以使用模板特化来执行此操作。例如

template <class T>
struct ConvertType;

template <>
struct ConvertType<RandomVariable>
{
    typedef RandomVariableCovariance type;
};

int main()
{
    ConvertType<RandomVariable>::type myVar;
}

定义类型ConvertType,专门用于从RandomVariable转换为RandomVariableCovariance。它可以根据您的需要以这种方式进行各种聪明的选择。

答案 1 :(得分:2)

Typenames不能是函数的参数或返回值;类型是编译时的事情!

答案 2 :(得分:0)

这是关于C ++ 0x的长列表。这就是他们创建这种奇怪的函数定义格式的原因:

auto FuncName(Type1 param1, Type2 param2) -> ReturnType {...}

它与decltype相结合,允许你做这样的事情:

auto FuncName(Type1 param1, Type2 param2) -> decltype(param1 + param2) {...}

这意味着返回类型将是您调用operator +(Type1,Type2)时获得的任何内容。

请注意,C ++是一种静态类型语言。您不能在运行时进行类型计算。它必须在编译时完成,通过这样的机制或某种形式的模板元编程。

答案 3 :(得分:-2)

原谅我可怕的C,因为自从我真正使用它以来它一直是永恒的:

typedef int RandomVariable;
typedef float RandomVariableCovariance;

RandomVariableCovariance myFunc(RandomVariable x) {
    ....
}