我具有以下功能
enum class NodeCachingOptions
{
AddPath,
DontAddPath
};
template <typename T, NodeCachingOptions>
T* CreateSObject(const MPath& path)
想法是专门用于不同NodeCachingOptions的功能。
原来不可能使用部分功能模板专业化,因此我尝试了一种解决方法:
template <typename T, NodeCachingOptions>
T* CreateSObject(const MPath& ob)
{
CreateSObject_Impl<class T, NodeCachingOptions> temp
return temp.call(ob);
}
template <typename T, NodeCachingOptions>
struct CreateSObject_Impl
{
T* call(const MPath& ob);
};
template <typename T>
struct CreateSObject_Impl<typename T, NodeCachingOptions::AddPath>
{
T* call(const MDagPath& ob)
{…}
}
template <typename T>
struct CreateSObject_Impl<typename T, NodeCachingOptions::DontAddPath>
{…}
但是我遇到编译错误::: NodeCachingOptions':非类型模板参数'__formal'的非法类型
我在做什么错,有没有更好的方法来解决这个问题?
我从这里开始了解struct impl:Partial template specialization of free functions - best practices
答案 0 :(得分:4)
您的语法都是错误的。做吧
template <typename T, NodeCachingOptions opt>
T* CreateSObject(const MPath& ob)
{
CreateSObject_Impl<T, opt> temp;
return temp.call(ob);
}
您将类型NodeCachingOptions
的 value 传递为CreateSObject_Impl
的第二个模板参数,而不是类型本身。
您可能希望将call
设为CreateSObject_Impl
的静态成员,并编写return CreateSObject_Impl<T, opt>::call(ob);