编译在针对多种架构编译的cpp文件的标头中定义的相同类

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

假设我已经定义了一个这样的类:

#include <vector>

enum class cpu { sse2, sse4, avx, avx4 };

template <cpu architecture = current_cpu>
class foo // current_cpu defined based on compiler's target architecture
{
    std::vector<int> data_;

public:
    // methods...
};

我针对x86_64的每个目标体系结构(sse2,sse4,avx,avx2)编译了4次。

这会生成4个不同的类foo<cpu::sse2>foo<cpu::sse4>

然后,我使用一些运行时分派在运行时创建正确的版本,并使用一些指针欺骗来调用内存中实例上的方法。

问题与std::vector<int> _data有关。 编译器是否可以决定不内联std::vector的所有内容,以便链接器保留为多个体系结构编译的std :: vector方法的多个版本,然后链接到错误的版本,因为它们都具有相同的功能名称乱码?

c++ compilation dispatch
1个回答
0
投票

在Clang上,理论上可以使用-fvisibility-inlines-hidden,但是实际上似乎没有用。另一种选择是避免类/函数不能使它们自己对于不同的体系结构是唯一的。

© www.soinside.com 2019 - 2024. All rights reserved.