小编luk*_*uke的帖子

如何使用模板来确定适当的参数传递方法?

据我所知,当一个对象传递给一个比寄存器大的函数时,最好将它作为(const)引用传递,例如:

void foo(const std::string& bar)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这避免了必须执行可能昂贵的参数副本.

但是,当传递适合寄存器的类型时,将其作为(const)引用传递最多是冗余的,最坏的情况是:

void foo(const int& bar)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我使用需要传递任何类型的模板化类时,我想知道如何充分利用这两个世界:

template <typename T>
class Foo
{
  public:

    // Good for complex types, bad for small types
    void bar(const T& baz);   

    // Good for small types, but will needlessly copy complex types
    void bar2(T baz);             
};
Run Code Online (Sandbox Code Playgroud)

是否有模板决策方法允许我选择正确的类型?可以让我做的事,

void bar(const_nocopy<T>::type baz);
Run Code Online (Sandbox Code Playgroud)

根据类型选择更好的方法?


编辑:

经过大量的定时测试后,两个通话时间之间的差异是不同的,但非常小.对于我的情况,解决方案可能是一个可疑的微优化.尽管如此,TMP仍然是一项有趣的心理锻炼.

c++ templates type-traits

4
推荐指数
2
解决办法
272
查看次数

如何在小册子中将圆形标记放在前面

我有两个circlemarkers,A和B,在同一个地方

演示

当我选择标记A时,我希望标记B移动到前面,反之亦然.

javascript leaflet

4
推荐指数
2
解决办法
7113
查看次数

您如何找到程序中最不优化的部分?

是否有任何工具可以提供程序大部分执行时间所用的直方图?

这是在visual studio 2008中使用c ++的项目.

c++ optimization profiler visual-studio

3
推荐指数
2
解决办法
423
查看次数

如何在Windows上运行应用程序使用visual c ++在win32 API中启动

我在visual c ++中有一个Window(win32 API)应用程序.我没有使用MFC.我必须在Windows启动时运行我的应用程序.我正在使用Windows 7和visual studio 2008.任何人都可以帮助我完成上述任务吗?提前致谢.

registry winapi visual-c++

3
推荐指数
2
解决办法
5814
查看次数

C++代码格式化

我已经使用VS2005和VS2008了一段时间,使用C#.没有任何额外的工具,我可以点击ctrl k + d,代码将很好地重新格式化.为什么C++不这样做?毕竟它是相同的Visual Studio.有没有办法启用它?

这个问题的第二部分是相关的,对于那些一直使用C#的resharper的人来说,是否有类似的C++工具?

c++ formatting

2
推荐指数
1
解决办法
1023
查看次数

如何在不输入".txt"的情况下保存文本文件?

我的程序(c ++):

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

float x, y, z;
char d[20];

int main()
{   
    cin.getline >>d;
    x=111;
    y=222;
    z=333;
    ofstream meuarquivo;
    meuarquivo.open (d".txt");
    meuarquivo << x << "\n";
    meuarquivo << y << "\n";
    meuarquivo << z << "\n";

    meuarquivo.close ();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想写一些类似"ThatsMyProgram"的东西,我希望程序将此文件保存为"ThatsMyProgram.txt".我怎样才能做到这一点?

c++

2
推荐指数
1
解决办法
209
查看次数

是否有可能以这种方式定义for循环?

有没有办法用"双"init-expression写入循环?

vector<int> v;
//...vector filling...
for (vector<int>::iterator i = v.begin() AND vector<int>::iterator e = v.end(); i != e; ++i){ ...}
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
2
解决办法
98
查看次数

为什么指针不能分配给C中的数组?

我有以下代码:

int *pa;

int a[3] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

为什么pa = a没问题,但a = pa是不允许的?

c arrays pointers

0
推荐指数
1
解决办法
180
查看次数