我上课了
template<size_t N, size_t M>
class Matrix {
// ....
};
Run Code Online (Sandbox Code Playgroud)
我想typedef创建一个Vector(列向量),它相当于一个Matrix大小为N和1的东西.这样的东西:
typedef Matrix<N,1> Vector<N>;
Run Code Online (Sandbox Code Playgroud)
这会产生编译错误.以下内容创建了类似的内容,但并不完全符合我的要求:
template <size_t N>
class Vector: public Matrix<N,1>
{ };
Run Code Online (Sandbox Code Playgroud)
是否有解决方案或不太昂贵的解决方法/最佳实践?
我经常需要在C++中处理动态分配的数组,因此依赖于Boost for scoped_array,shared_array等.在阅读了Stroustrup的C++ 11 FAQ和C++ 11 Reference Wiki之后,我无法找到C++ 11标准提供的这些动态数组包装器的合适替代品.有什么东西我忽略了,还是我必须继续依赖Boost?
非常感谢您的帮助!
有没有之间的差异boost::shared_ptr,std::tr1::shared_ptr以及即将到来的(中C++0x)std::shared_ptr?
从一个移植到另一个有任何开销还是基本相同?
假设我有两个不相关的类A和B.我也有一个Bla使用boost::shared_ptr这样的类:
class Bla {
public:
void foo(boost::shared_ptr<const A>);
void foo(boost::shared_ptr<const B>);
}
Run Code Online (Sandbox Code Playgroud)
请注意const.这是这个问题的原始版本所缺乏的重要部分.这个编译,以下代码工作:
Bla bla;
boost::shared_ptr<A> a;
bla.foo(a);
Run Code Online (Sandbox Code Playgroud)
但是,如果我在上面的例子中从使用切换boost::shared_ptr到使用std::shared_ptr,我得到一个编译错误,说:
"error: call of overloaded 'foo(std::shared_ptr<A>)' is ambiguous
note: candidates are: void foo(std::shared_ptr<const A>)
void foo(std::shared_ptr<const B>)
Run Code Online (Sandbox Code Playgroud)
你能帮我弄清楚为什么编译器无法弄清楚在std :: shared_ptr情况下使用哪个函数,并且可以在boost :: shared_ptr情况下吗?我正在使用Ubuntu 11.04软件包存储库中的默认GCC和Boost版本,这些版本目前是GCC 4.5.2和Boost 1.42.0.
以下是您可以尝试编译的完整代码:
#include <boost/shared_ptr.hpp>
using boost::shared_ptr;
// #include <memory>
// using std::shared_ptr;
class A {};
class B {};
class Bla {
public: …Run Code Online (Sandbox Code Playgroud)