![](/img/trans.png)
[英]Is There a Workaround for Visual Studio's Lack of Support for auto Template Parameters?
[英]Workaround for the lack of default template parameters in visual c++ 2012
我有这样的课:
template <class Object = NullObject>
class MyClass : OptimizedStorage<Object> {
...
public:
//Cannot do this in Visual studio 2012
template <class Object2 = Object,
class = enable_if<!is_same<Object2, NullObject>::value>>
Object & get() const {
return this->object_;
}
}
有人知道吗:
get()
。 问候
一个简单的解决方法是编写一个仅调用模板的包装器函数。 例如:
private:
template<typename ENABLER>
Object& get_()
{
return this->object_;
}
template<typename Object2>
Object& get_()
{
return get_<typename std::enable_if<!std::is_same<Object2,NullObject>::value>::type>();
}
public:
//Overload for default Object template parameter:
Object& get()
{
return get_<Object>();
}
当然,编译器可以内联所有包装,因此此处的性能不是问题。
请注意,我已经使用了const
限定符:您正在返回对内部数据的引用,即getter不能/不应该是const
。
以下内容可能会有所帮助:
template <class Object = NullObject>
class MyClass {
Object object_;
template <class T>
typename std::enable_if<!std::is_same<T, NullObject>::value, Object &>::type
get_() { return this->object_; }
public:
Object& get() { return get_<Object>(); }
};
或者您可以专门化您的结构(可能需要一些复制/粘贴:/):
template <class Object = NullObject>
class MyClass {
Object object_;
public:
Object& get() { return this->object_; }
};
template <>
class MyClass<NullObject> {
public:
// No get function.
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.