这个问题用不同的 clang 格式版本扩展了统一输出。问题是 clang-format 的默认行为因版本而异,即使对于内置样式也是如此。坦率地说,我想问一下为什么开发人员在这里不关心兼容性,但这无关紧要。情况就是这样,我必须处理它。我不允许需要某个版本的 clang-format(就像相关答案中建议的一位用户)并且需要配置 clang-format 以便它为不同版本提供相同的结果。如果可能,应涵盖 >= 4.0 的版本。如果这不可行,则可以接受适用于版本 >= minimum_version 的解决方案。
我想人们可以为每个 clang 格式版本找到一个配置,以提供所需的输出——繁琐的工作,但至少它是一个解决方案。但是对不同版本使用相同的 .clang 格式文件会产生一些问题,因为旧版本不知道新密钥。所以一个人需要
有任何想法吗?
注意:几个相关问题(例如,这个问题)最终被标记为该问题的重复项。我知道这个特定问题并遵循相应答案中的解决方案。然而,不同的编译器会产生不同的行为,我不知道为什么。
我的库具有一个类模板,我想为库中的某些模板参数提供实例,因为该模板需要一些重要的编译时间。类模板可能如下所示 ( stack.hpp)
#ifndef MY_STACK
#define MY_STACK
template<class T>
class stack
{
public:
stack();
};
#endif
Run Code Online (Sandbox Code Playgroud)
其实现驻留在相应的stack.tpp文件中
#ifndef MY_STACK_TPP
#define MY_STACK_TPP
#include <iostream>
template<class T>
stack<T>::stack()
{
std::cout << "My stack constructor!" << std::endl;
}
#endif
Run Code Online (Sandbox Code Playgroud)
由于我只想提供对某些模板参数的支持,因此我stack.cpp创建了以下显式模板实例:
#include "stack.hpp"
template class stack<double>;
template class stack<char>;
#include "stack.tpp"
Run Code Online (Sandbox Code Playgroud)
它使用 g++ 和 clang++ 进行编译,但生成的共享库的符号存在差异:
g++ -std=c++11 -c stack.cpp -o stack.so
nm -C stack.so | grep stack
0000000000000049 t _GLOBAL__sub_I_stack.cpp
0000000000000000 W …Run Code Online (Sandbox Code Playgroud)