【问题标题】:Is it possible to pass a class as an argument of a function in C++是否可以在 C++ 中将类作为函数的参数传递
【发布时间】:2014-04-15 14:54:07
【问题描述】:

这是我想做的一些伪代码:

void thing (storedClassArg){
    virtualClass<x,y> in1 = new storedClassArg<x,y>;
    virtualClass<x,z> in2 = new storedClassArg<x,z>;
}
 
main:
storedClass;
if( inputThingy)
    storedClass = type1;
else
    storedClass = type2;
thing(storedClass);

【问题讨论】:

  • 这在 C++ 中是不可能的。 C++17 正在考虑将反射纳入 C++ 的各种提案。
  • @BrianBi 哇,你真的明白这个问题了吗?
  • 实际上现在只考虑 compile-time 反射。他们说他们首先研究编译时反射,因为它可能决定应该存在什么样的运行时反射设施。所以不要指望它直到 C++23...
  • @juanchopanza 我不知道 OP 到底想做什么,但它肯定看起来像反思......
  • 这个问题似乎是题外话,因为它是关于一些童话语言,而不是c++ ...

标签: c++ class templates


【解决方案1】:

简短回答:不。

您不能将类作为参数传递给函数。你只能传递一个。值指的是对象或函数。

可以将类作为参数传递给模板。但是,模板参数必须在编译时确定,而不是在运行时确定。

C++ 仅通过继承提供运行时多态性。如果您想创建一个直到运行时才知道其类型的对象,您可以做的是创建所有可能的类型,您可能希望创建一个公共基类的派生类。

即便如此,您也不能将要创建的类型本身用作函数的参数。您必须传入一些其他值,然后对其进行分支以确定您要在运行时创建哪种类型。

【讨论】:

  • “C++ 仅通过继承提供运行时多态性。” - 具有专门的语言支持 - 是的,但您也可以选择通过混合更通用的语言功能(unionreinterpret_cast、放置new 等,类型列表)手动协调它,例如boost::variantboost::any.
猜你喜欢
  • 2020-02-19
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 2014-05-26
相关资源
最近更新 更多