小编Jen*_*lom的帖子

整个同一模板类的友谊

考虑以下:

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'可见而不将成员ifoo移动到一个共同的基类或做一些疯狂的事情,如添加朋友类A <1>

也就是说,有没有办法制作相同模板类朋友的模板?

c++ templates c++11

9
推荐指数
1
解决办法
78
查看次数

通用 C++ 架构

我已经编写 C++ 和 Java 有一段时间了,并且对常见的 C++ 架构有一些疑问。

当我用 Java 编程时,我尝试模仿标准库,即使用诸如 Iterable 和 Serializable 之类的接口,并具有类似的命名约定和功能。然而,对于 C++,我在尝试模仿 STL 约定时犹豫不决(迭代器除外)。

我将其归结为以下问题(是以下要实施的常见约定):

  • 分配器
  • 接口(只有纯虚方法的类)
  • 模板而不是抽象基类
  • 限制异常抛出...
  • ... 或者让一个类可以选择抛出异常(例如在 std 流中)
  • 将 typedef 用于或多或少的明显类型(reference_type、pointer_type、value_type,...)

还是 C++ 的标准根本不值得模仿?

感谢您的意见/回答!

c++ architecture oop stl

6
推荐指数
1
解决办法
4862
查看次数

静态方法作为函数指针

在许多情况下,C框架使用函数指针来扩展功能并通知侦听器(例如win32-api和GLUT).在编写面向对象的C++时,您更喜欢使用类和对象来处理它.所以我的问题是:

使用指向静态方法的指针是否安全,其中C库期望一个函数指针?

c c++ oop

4
推荐指数
1
解决办法
627
查看次数

特殊指针值0xFEEEFEF6

我碰到一个访问冲突来到同时阅读位置0xFEEEFEF6在Visual Studio 2012(使用2012年11月CTP编译)深的地方的C++ 11并发里面执行.

这个值有什么特别的含义吗?在Wikipedia中查找我发现了类似的条目(0xFEEEFEEE0xFEEDFACE).

c++ visual-studio c++11

3
推荐指数
1
解决办法
1347
查看次数

扩展类,组合与多态时的性能

扩展一个类时,多态性和组合之间的性能是否存在差异?使用组合(在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)

组合版本使用引用作为成员,所以我认为它需要更多的空间,但是在这两个版本中是否有任何性能提升?

注:我已签出后,如类似这样,但不包括性能.

谢谢您的回答!

c++ oop

1
推荐指数
1
解决办法
1129
查看次数

标签 统计

c++ ×5

oop ×3

c++11 ×2

architecture ×1

c ×1

stl ×1

templates ×1

visual-studio ×1