考虑以下使用 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。任何帮助表示赞赏。