- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我维护着一个庞大的模板类库,这些模板类根据float
或double
类型执行代数计算。许多类都有访问器方法(getter和setter)以及其他运行少量代码的函数,因此,当编译器找到其定义时,此类函数必须被限定为内联函数。相反,其他成员函数包含复杂的代码,因此最好调用而不是内联。
函数定义的很大一部分位于 header 中,实际上位于 header 包含的.inl文件中。但是,也有许多类的函数定义通过float
和double
的显式实例化而幸福地存在于.cpp文件中,这对于库来说是一件好事(here解释了为什么)。最后,有许多类的功能定义在.inl文件(访问器方法)和.cpp文件(构造函数,析构函数和繁重的计算)中被打乱,这使得它们都很难维护。
只有在我知道防止内联某些函数的可靠方法的情况下,我才会在.inl文件中使用所有类的实现;如果inline
关键字可以强烈建议编译器内联某些函数,则将在.cpp文件中使用所有的类实现。它不是。我真的希望库中的所有函数定义都驻留在.cpp文件中,但是由于访问器方法在整个库中得到了广泛使用,因此我必须确保在引用而不是调用它们时都将它们内联。
因此,在这方面,我的问题是:
inline
进行了标记,编译器都会自动将其定义为内联,是否可以使用inline
标记模板函数的定义是否有意义?或不? inline
关键字只是对编译器内联函数的建议。
inline
关键字标记这些函数,以为编译器提供良好的提示(或使用用于内联强制的关键字),并将其余功能移入各自的.cpp文件。
inline
来加倍鼓励函数的内联状态(尚不知道在这种情况下关键字是应该放在两个位置还是仅放在一个位置)。
最佳答案
1. Does it make any sense to mark the definition of a template function with inline in view of the fact that, as I've recently learnt, it is going to be automatically qualified as inline by the compiler regardless of whether it's marked with inline or not? Is the behavior compiler-specific?
9.3 Member functions
...
A member function may be defined (8.4) in its class definition, in which case it is an inline member function (7.1.2)
template <typename FloatT> my_class<FloatT>::my_function()
始终是内联函数:
template <typename FloatT>
class my_class
{
public:
void my_function() // `inline` member function
{
//...
}
};
template <>
class my_class<double> // specialization for doubles
{
public:
void my_function() // `inline` member function
{
//...
}
};
但是,通过将
my_function()
的定义移到
template <typename FloatT> my_class<FloatT>
的定义之外,它不会自动成为内联函数:
template <typename FloatT>
class my_class
{
public:
void my_function();
};
template <typename FloatT>
void my_class<FloatT>::my_function() // non-`inline` member function
{
//...
}
template <>
void my_class<double>::my_function() // non-`inline` member function
{
//...
}
在后一个示例中,将
inline
说明符与定义一起使用确实是有道理的(例如,这不是多余的):
template <typename FloatT>
inline void my_class<FloatT>::my_function() // `inline` member function
{
//...
}
template <>
inline void my_class<double>::my_function() // `inline` member function
{
//...
}
2. And most importantly, since I would like to have the definitions of all the member functions of a template class gathered together in a single file, either it's .inl or .cpp (using explicit instantiation in case of .cpp), preferably still being able to hint the compiler (MSVC and GCC) which of the functions should be inlined and which shouldn't, sure if such thing is possible with template functions, how can I achieve this or, if there is really no way (I hope there is), what would be the most optimal compromise?
inline
说明符;
inline
说明符只是一个提示。
__forceinline
关键字来强制内联,而
#pragma auto_inline(off)
则阻止内联。 G++支持分别强制和防止内联的
always_inline
和
noinline
属性。您应引用编译器的文档以获取详细信息,包括在编译器无法按要求内联函数时如何启用诊断。
#include
集合多很多的
#include
,定义类/模板。例如,有时成员函数定义将需要
#include <algorithm>
,但是类定义不太可能需要包含
<algorithm>
才能进行定义。您的编译器可以跳过不使用的函数定义,但是更多的
#include
可以显着延长编译时间,并且您不太可能希望内联这些非“简单”的函数。
3. If compilers are so smart these days that they can make better choices about which function should be inlined and which should be called and are capable of link-time code generation and link-time optimization, which effectively allows them looking into a .cpp-located function definition at link time to decide its fate about being inlined or called, then maybe a good solution would be simply moving all the definitions into respective .cpp files?
关于c++ - 跨文件的代码组织,这些文件必须处理模板功能和内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420802/
namespace std { template <> class hash{ public : size_t operator()( cons
我正在构建一个 Javascript 交互性有限的 Django 应用程序,并且正在研究如何将 Vue 模板与 Django 模板合并以实现相同的内容。 想象一个无限滚动的页面,其中 SEO 非常重要
我需要一个由游戏逻辑组成的外部类,调用 LitElement 组件,并向其传递一个 html 模板文字,该组件将使用该文字来更新其自己的 html 模板文字的一部分。 在下面的代码中,您将看到组件的一
很简单,我不想在 html 文件中定义所有 Handlebars 模板 我试过了 但这并没有奏效。我是否可以不以编程方式定义模板,甚至只是加载 Handlebars 文件,以便我可以重用,而且我觉得
在此代码中,j 正确地成为对象:j.name、j.addr、j.city、j.state 和 j.zip。但是,成功函数有一个 JavaScript 错误 .tmpl() 不是函数。 {{t
Django模板不会?点进来,总结了模板语法传值取值、过滤器和自定义过滤器、模板标签的分类、中间件403报错如何解决、如何继承模板~👆 Django 模板 模板传值取值 后端传值 键值对形式:{‘n
哈喽大家好,我是鹿 九 丸 \color{red}{鹿九丸}鹿九丸,今天给大家带来的是C++模板。 如果大家在看我的博客的过程中或者学习的过程中以及在学习方向上有什么问题或者想跟我交流的话可以加我的企
我正在用 PHP 编写一个简单的模板层,但我遇到了一些困难。目前它是这样工作的: 首先,我使用 fetch_template 从数据库中加载模板内容 - 这可行(如果您有兴趣,我会在启动时收集所有模板
我正在制作有关模板的 Django 教程。我目前处于此代码: from django.template import Template, Context >>> person = {'name': '
我正在使用 Jquery 模板来显示传入的 JSON 数据我想将模板加载到可缓存的外部文件中。我该怎么做? 更新 http://encosia.com/2010/12/02/jquery-templa
这是我的观点.py: from django.http import HttpResponse from django.template.loader import get_template from
我试图说服一位同事在项目的前端使用 Mustache/Hogan,我提出了以下建议: 有一个 templates.js 文件,大致如下所示: var tpl_alert = '{{msg}}'; va
我想创建一个通用的数组函数。在我的 API 中,我有一个通用容器,我需要将其转换为正确的类,但我想让它通用 template void UT::printArray(CCArray* arr, T t
有谁知道是否有办法在 Genshi 中创建 javascript 模板?我的意思是,我需要一个 .js 文件,可以在其中使用 等指令。等等。 有什么想法吗?谢谢! 最佳答案 你可以直接在html中这
我想知道是否可以设置某种 HTML 模板系统,基本上我有 3 个不同的文件: - header.html - footer.html - landing.html(landing.html 是包含页面
我正在尝试构建以下 HTML 模板: 这很简单,如果我使用红色容器 1-4,语法如下: 1 2 3 4 5 6 7 8 9 https://jsfi
#include "boost/numeric/ublas/matrix.hpp" using namespace boost::numeric::ublas; template class Lay
我在一个类中有一个函数,它传递了一个函数及其参数,然后将它们绑定(bind)到一个函数调用中并调用该函数等。 这已经被快速组合在一起以测试我知道代码不是很好的概念。 class Profiling {
是否有一个 c++ 结构或模板(在任何库中)允许我在十进制和任何其他基数之间进行转换(很像 bitset 可以做的)? 最佳答案 是的,你可以使用unsigned int: unsigned int
数据类型给程序设计带来的困扰及解决方案 int maxt(int, int); double maxt(double, double); 若有一种占位符T,能够代替类型,便可以简化代码的冗余编写
我是一名优秀的程序员,十分优秀!