c++ - 如果我只有依赖程序的 .o 文件,我可以在可执行文件中反射(reflect)头文件的变化吗

标签 c++ templates linker g++ header-files

我有两个文件

主要.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/

相关文章:

objective-c - 未找到符号。收集2 : Id returned 1 exit status

C++ - 几何基元类层次结构

c++ - 返回 vector<auto_ptr<T>> 是否安全?

c++ - 从 C++ 调用 COM dll, "Class Not Registered"

javascript - backstretch javascript iphone 问题 Bootstrap 模板

C++任意函数反序列化

c++ - const 迭代器的模板参数而不是迭代器

c++ - 从多个 C++ 和 C 目标文件生成单个 .so

c++ - C++ 类 std::numeric_limits 中的字段与方法

linux - 如何让 Nvidia 的 PhysX 3.3 在 Linux 中链接?