如果我们在C#中有以下简单代码:
class Program
{
static void Main(string[] args)
{
string x = "Hello World";
test(x);
int y = 101;
test(y);
Console.ReadKey();
}
static void test(object val)
{
Console.WriteLine(val);
}
}
所以,我们有一个引用类型对象作为参数 - 工作正常。如何在C ++中做类似的事情?
OT:如果没有直接输入,我们可以使用 var 关键字,在C ++中存在关键字 auto 。在这里有任何类似的参考类型,如对象或一些方法/技巧来证明它吗?
答案 0 :(得分:3)
在C ++中,并非所有对象都来自公共基类型;没有通用的运行时多态性。但是,您可以通过模板使用编译时多态来获得所需的行为。
#include <iostream>
#include <string>
template <class T> void test(const T& val)
{
std::cout << val << "\n";
}
int main(int ac, char **av)
{
std::string x = "Hello World";
test(x);
int y = 101;
test(y);
}
答案 1 :(得分:1)
C ++没有类似于C#的System.Object
的“根类型”。您可以使用boost::any
来模拟该概念,但这需要使用外部库。
就通过引用传递参数而言,您可以使用MyType &myTypeRef
语法在C ++中通过引用传递,或者通过指针MyType *myTypePtr
传递。
答案 2 :(得分:0)
由于C ++没有为所有类型强制执行公共基类型,因此您无法完全执行相同的操作。但是,您可以使用模板来实现相同的目标:
void fn(....)
{
string x = "Hello World";
test(x);
int y = 101;
test(y);
}
template <typename T>
void test(const T& val)
{
cout << val;
}