使类模板的静态内联变量模板跨边界工作

问题描述 投票:0回答:1

我在使this类跨界工作时遇到问题。这是一个类模板,它公开了静态内联变量模板。

为了缩小问题的范围并摆脱图书馆的特定内容,请考虑以下示例:

template<typename...>
class family {
    inline static int identifier{};

    template<typename...>
    inline static const int inner = identifier++;

public:
    template<typename... Type>
    inline static const int type = inner<std::decay_t<Type>...>;
};

struct foo {
    using bar = family<foo>;

    template<typename T>
    void quux() {
        const auto id = bar::type<T>;
        // do something with id
    }
};

这在许多情况下都很好(长话短说,只要默认可见性不为[[hidden,因此从字面上看,对于大多数用户而言,它仅在Windows上会中断)。

您可以猜测,该类的目标是为类型生成顺序数字标识符。现在,我有一个主要的可执行文件和两个(或更多)DLL。为了使它起作用,我需要直观地将它们全部引用相同的变量。但是,在Windows上以及将默认可见性设置为使用GCC / CLang隐藏时不是这种情况。

我正在努力寻找

right

使其正常工作的方法,我们说按预期。到目前为止,我所有的尝试都失败了。我尝试导出该类并显式实例化它以及我感兴趣的类型的变量模板。但是,它没有用。我很确定我这里缺少明显的东西,但是我看不到。任何帮助将不胜感激。

我在使此类跨界工作时遇到问题。这是一个公开静态内联变量模板的类模板。为了缩小问题的范围并摆脱图书馆的...

c++ dll shared-libraries dllimport dllexport
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.