作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我继承的一堆遗留代码中,单元测试是使用Boost.Test实现的.启用检查 std::wstring
和 icu::UnicodeString
为了通过 BOOST_CHECK_EQUAL()
实现相等性,原作者为 equal_impl()
实现了显式模板特化:
// test_utils.hpp
#include <boost/test/unit_test.hpp>
#include <unicode/unistr.h>
namespace boost
{
namespace test_tools
{
namespace tt_detail
{
template<>
static
boost::test_tools::predicate_result equal_impl( const std::wstring & wleft, const icu::UnicodeString & uright )
{
const icu::UnicodeString uleft = w2u( wleft );
return uleft == uright;
}
template<>
static
boost::test_tools::predicate_result equal_impl( const icu::UnicodeString & uleft, std::wstring & wright )
{
const icu::UnicodeString uright = w2u( wright );
return uleft == uright;
}
}
}
}
现在,此构造将模板特化标记为 static
。我知道旧的 GCC 版本接受了这一点,但今天的版本(4.3 后版本)拒绝了它:
error: explicit template specialization cannot have a storage class
但是,如果我删除 static
,我会在链接时得到多重定义
。而且我不能将所有内容都放在匿名命名空间中,我可以吗,因为我必须在 boost::test_tools::tt_detail
中专门化模板?
我不知道如何解决这个问题(没有将所有测试完全重构为使用 a custom predicate 而不是 BOOST_CHECK_EQUAL()
)...?
请注意,不幸的是,此时 C++11 不是一个选项,因为并非所有目标平台都具有适当的编译器支持。
最佳答案
把static
换成inline
就可以了。
关于c++ - 显式特化模板、静态与重复符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27981096/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!