是否可以编写一个接受类型并返回(相关)类型的函数。例如,一个函数采用一个名为“RandomVariable”的类型并返回一个名为“RandomVariableCovariance”的类型。我猜一般来说问题是类型名是否可以是参数或返回类型。 C ++ 0x很好。
答案 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) {
....
}