gpt4 book ai didi

c++ - GCC 函数多版本控制和命名空间

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:35 25 4
gpt4 key购买 nike

考虑以下使用 GCC 函数多版本控制的代码片段。

//ver.h
#include<string>
namespace nt {
__attribute__ ((target ("default"))) std::string version();
__attribute__ ((target ("sse2"))) std::string version();
__attribute__ ((target ("ssse3"))) std::string version();
__attribute__ ((target ("sse4"))) std::string version();
}

//ver.cpp
#include "ver.h"
using namespace nt;
__attribute__ ((target ("default"))) std::string nt::version() { return "default"; }
__attribute__ ((target ("sse2"))) std::string nt::version() { return "sse2"; }
__attribute__ ((target ("ssse3"))) std::string nt::version() { return "ssse3"; }
__attribute__ ((target ("sse4"))) std::string nt::version() { return "sse4"; }

如果函数在全局命名空间中,则代码可以正常工作。但是,当它们被包装在命名空间中时,编译会失败并显示

error: missing ‘target’ attribute for multi-versioned std::string nt::version()

我正在使用 GCC 4.8.2。感谢您的帮助。

最佳答案

您还需要在 nt 命名空间中定义函数。

//ver.cpp   
#include "ver.h"
namespace nt {
__attribute__ ((target ("default"))) std::string version() { return "default"; }
__attribute__ ((target ("sse2"))) std::string version() { return "sse2"; }
__attribute__ ((target ("ssse3"))) std::string version() { return "ssse3"; }
__attribute__ ((target ("sse4"))) std::string version() { return "sse4"; }
}

关于c++ - GCC 函数多版本控制和命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19785010/

25 4 0
文章推荐: c++ - 无法将字段 声明为抽象类型