代码之家  ›  专栏  ›  技术社区  ›  Brian Stewart

在C++/CLI中使用PIMPL习惯用法时MSVC++链接器警告

  •  1
  • Brian Stewart  · 技术社区  · 16 年前

    我正在使用C++/CLI(9.0版)编写一个.NET程序集,我希望使用PIMPL习惯用法来避免在我的公共头中放入不必要的内容。不幸的是,当我尝试前向声明一个类,然后对其使用跟踪句柄时,我得到链接器警告4248:

    对于实现类,无论我使用CLI类还是本机类,似乎都是如此。

    namespace MyNamespace
    {
        ref class PrivateClass; // forward dec
    
        ref class MyPublicClass
        {
        private:
            PrivateClass^ m_Imp;
        };
    }
    

    不幸的是,微软对该警告的解释信息量不大。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Will Dean    16 年前

    我认为您使用的两种技术并不能很好地结合在一起:

    C++/cli的自然应用程序是编写精简的互操作片段,而VS在这些项目上的默认行为是将所有代码放入头中,这几乎是您可以得到的反pimpl。

        2
  •  1
  •   Brian Stewart    16 年前

    在进一步挖掘和反思之后,我发现在某些方面,NET不需要像C++一样支持pIMPL,因为您可以为程序集标记一个类,这在某些方面基本上具有相同的效果。但是,PIMPL习惯用法通常用于隐藏您不希望客户端必须编译的头。当然,NET程序集并不像“C++”的标题那样“包含”,所以我想也没有问题。