我有一段代码就是这样的事情
type<X> function( args<x> g)
{
...
function2();
.....
}
现在X可以是两种类型,比如type1和type2。我想把这个函数写成 类型函数(args g) { ...
if X is of type1 then call function2();
if X is of type2 then call function3();
.....
}
我怎样才能做到这一点。我正在使用C ++并在visual studio中进行开发。
感谢
答案 0 :(得分:1)
您可以使用模板专业化或功能过载。例如:
template <class X>
int foo(std::vector<X> a)
{
foo1();
}
template <>
int foo<int>(std::vector<int> a)
{
foo2();
}
注意,如果您只需要为少数几种类型专门设置函数,最好使用函数重载。如果你有很多类似的代码,唯一的区别在于1个函数调用,可以使用typeid
:
if (typeid(X) == typeid(type1)) {
function2()
} else if (typeid(X) == typeid(type2)) {
function3()
}
答案 1 :(得分:1)
注意:基于类型进行比较的代码通常表示设计不佳。
您可以使用一个具有不同签名的功能:
void my_function(const type_1& t1);
void my_function(const type_2& t2);
让编译器根据参数类型选择函数。
答案 2 :(得分:1)
我假设X是一个班级?您应该使用虚函数并创建X的派生版本。请参见下面的示例:
class X
{
public:
virtual void myFunction(int input) { // do stuff here... }
};
class Y : public X
{
public:
void myFunction(int input) { // do overridden stuff here... }
};
然后,如果你创建一个X类型的对象并在其上调用myFunction(),那么它将在这里运行&#34; do stuff&#34;码。如果你创建一个Y类型的对象并在其上调用myFunction(),那么它将在这里运行&#34; do overridden&#34;代码而不是。但是你可以以多态方式使用你创建的任何对象,如下所示:
X *obj = NULL;
if (condition met)
{
obj = new X();
}
else
{
obj = new Y();
}
obj->myFunction(myInput); // will call either X or Y's myFunction() depending on what type it is