C++ GCC函数多版本控制和名称空间
考虑以下使用GCC函数多版本控制的代码段C++ GCC函数多版本控制和名称空间,c++,gcc,C++,Gcc,考虑以下使用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(); __a
//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"; }
我使用的是GCC4.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"; }
}
他们是。在OPs问题中,函数的前缀是
nt::
。这还不够吗?也许应该,我不太明白为什么gcc不能解析这个表单——但它不是。。
//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"; }
}