gpt4 book ai didi

c++ - visual c++ 2012 中缺少默认模板参数的解决方法

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:08 25 4
gpt4 key购买 nike

我有这样一个类:

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_;
}
}

有没有人知道:

  1. 拥有此界面的解决方法。
  2. 一些其他的解决方法,即使它使事情变得更脏,仍然允许我在底层对象存在时 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

关于c++ - visual c++ 2012 中缺少默认模板参数的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22706401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com