我有两个文件
主要.cpp
#include<iostream>
#include "tmp1.h"
using namespace std;
int main() {
cout<<factorial<7>::value<<endl;
}
和 tmp1.h
#include<iostream>
using namespace std;
template <unsigned n>
struct factorial
{
enum { value = n * factorial<n-1>::value };
};
template <>
struct factorial<0>
{
enum { value = 1 };
};
我使用 -c 标志编译 main.cpp
g++ -c main.cpp 生成main.o文件
然后我将阶乘模板的基本情况更改为“value = 2”并使用
链接它
g++ -o tmpex main.o tmp1.h
但是当我运行可执行文件时,它输出 5040 而不是 10080,这是我需要的新值。
有什么我可以做的,即使我只有 main.o 文件而不是它的源代码,我也可以更改头文件并在新的可执行文件中反射(reflect)更改
总结
我有一个 main.o 文件和它所依赖的头文件。我想在头文件中进行更改并在不需要 main.cpp 文件的情况下在新的可执行文件中反射(reflect)更改
最佳答案
不,你不能。 该模板在编译 阶段实例化,即生成 .o 文件时。 将 header 添加到链接阶段不会有任何影响
关于c++ - 如果我只有依赖程序的 .o 文件,我可以在可执行文件中反射(reflect)头文件的变化吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46417461/