【发布时间】:2015-08-10 14:18:48
【问题描述】:
我必须根据我作为参数获得的类的类型在我的模板中执行活动:
在类.h
class SomeClass;
class SomeOtherClass;
class Class
{
public:
template <typename T> void function(T value);
};
在 Class.cpp 中
template<typename T> void Class::function(T value)
{
// Whole lots of common code here
if (T == SomeClass)
{
// Do something by casting value to SomeClass
SomeClass* ptrSomeClassObj = (SomeClass*) &value;
ptrSomeClassObj->MemberFunctionOfSomeClass();
}
else
{
// Do something else
}
// Whole lots of common code here
}
现在我有这些问题:
这里的
if (T == SomeClass)语法不正确。我该怎么做?T的类型转换我所做的方式不会给我任何语法错误。但是这样做合适吗?我相信 C++ 有更好的方法。
更新: 不是真的在寻找Template specialization,因为它会在专用函数中复制大量通用代码(如上面的代码中所述)。
【问题讨论】:
-
也使用模板特化代替
if (T == SomeClass)。 -
template<> void Class::function(SomeClass) value) { // code for SomeClass ... } -
另外,不知道这是怎么复制的?另一个问题是关于模板实现的通用问题。我要问的是这个非常具体。
-
@πάνταῥεῖ 实现拆分会是个问题,但这不是这个问题的重点。
标签: c++