考虑以下:
template<int N>
class A
{
public:
A() : i(N) {}
template<int K>
void foo(A<K> other)
{
i = other.i; // <-- other.i is private
}
private:
int i;
};
int main()
{
A<1> a1;
A<2> a2;
a1.foo(a2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使'other.i'可见而不将成员i和foo移动到一个共同的基类或做一些疯狂的事情,如添加朋友类A <1>?
也就是说,有没有办法制作相同模板类朋友的模板?
我已经编写 C++ 和 Java 有一段时间了,并且对常见的 C++ 架构有一些疑问。
当我用 Java 编程时,我尝试模仿标准库,即使用诸如 Iterable 和 Serializable 之类的接口,并具有类似的命名约定和功能。然而,对于 C++,我在尝试模仿 STL 约定时犹豫不决(迭代器除外)。
我将其归结为以下问题(是以下要实施的常见约定):
还是 C++ 的标准根本不值得模仿?
感谢您的意见/回答!
在许多情况下,C框架使用函数指针来扩展功能并通知侦听器(例如win32-api和GLUT).在编写面向对象的C++时,您更喜欢使用类和对象来处理它.所以我的问题是:
使用指向静态方法的指针是否安全,其中C库期望一个函数指针?
我碰到一个访问冲突来到同时阅读位置0xFEEEFEF6在Visual Studio 2012(使用2012年11月CTP编译)深的地方的C++ 11并发里面执行.
这个值有什么特别的含义吗?在Wikipedia中查找我发现了类似的条目(0xFEEEFEEE和0xFEEDFACE).
扩展一个类时,多态性和组合之间的性能是否存在差异?使用组合(在C++中)使用以下示例:
class Window
{
public:
Window(Renderer &renderer) : m_renderer(renderer)
{ }
void update()
{
....
m_renderer.draw(this);
}
private:
Renderer &m_renderer;
}
Run Code Online (Sandbox Code Playgroud)
...并使用多态性:
class Window : public Renderer
{
public:
virtual ~Window() {};
void update()
{
...
draw();
}
protected:
virtual void draw() = 0;
}
Run Code Online (Sandbox Code Playgroud)
组合版本使用引用作为成员,所以我认为它需要更多的空间,但是在这两个版本中是否有任何性能提升?
注:我已签出后,如类似这样,但不包括性能.
谢谢您的回答!