首先看看这些模板。
struct INIWindows{
inline int GetInteger(){
return 100;
}
};
struct INILinux{
inline int GetInteger(){
return 120;
}
};
template <class Reader>
class SettingsManager : public Reader{
};
编辑:附录,因为我不清楚我在做什么。
int main(){
SettingsManager<INIWindows> Settings;
printf("Integer Reads %i\n",Settings.GetInteger());
system("pause");
return 0;
}
我的理解是否正确,这会导致SettingsManager
有一个名为get integer的内联函数,然后由编译器正确内联?
答案 0 :(得分:2)
我的理解是否正确,这将导致SettingsManager具有一个名为get integer的内联函数,然后由编译器正确内联。
是的,您的理解是正确的。您的方法将被放置在SettingsManager类中,而不进行虚拟分派,因为基类(INIWindows和INILinux)没有虚拟方法。
inline
关键字只是编译器尝试内联方法的命令 - 没有别的。没有这样做是免费的。
答案 1 :(得分:1)
inline
在课堂上毫无意义。如果您已经定义了外部类的函数,那么它将指示内部链接。但是在您当前的代码中没有任何用途:类中定义的所有函数都是内联的。
对于编译器,inline
只是意味着名称在编译单元外部不可见。在这方面,它与全球static
类似。除此之外,编译器可以以任何方式自由地执行函数调用内联。
特别是,优化器可以选择用函数的内容替换调用。这是你想要的,但它(几乎完全)与inline
关键字无关,尽管它的名字。
(顺便说一句,这与模板和模板元编程无关。)