小编Ala*_*ing的帖子

在C++中定义短函数名称别名最安全的方法是什么?

假设我Utility在一个文件中有一个类utility.h:

class Utility {
public:
    static double longDescriptiveName(double x) { return x + 42; }
};
Run Code Online (Sandbox Code Playgroud)

然后我发现我使用的功能longDescriptiveName(...)很多.就像一个不负责任的C++程序员,当我喝了太多咖啡时,我创建了一个新文件utilitymacros.h并在其中添加以下内容:

#define ldn Utility::longDescriptiveName
Run Code Online (Sandbox Code Playgroud)

现在我把它包括"utilitymacros.h"*.cpp我使用的任何地方ldn(...),我的心里充满了快乐,因为输入3个字母对28更加方便.

问题:这样做比使用更安全(更合适)#define吗?

我注意到在包含boost标题之后我必须包含"utilitymacros.h",我显然不喜欢它,因为它是冲突的标志(尽管我得到的Boost错误并不是很清楚冲突是什么) .

澄清1:关于代码可读性

如果您可能会说这会对代码可读性产生负面影响,我向您保证不会,因为它是一小部分功能使用很多.被广泛知道的一个例子是stoistringToInteger.另一种是pdfprobabilityDensityFunction等,所以如果我要做到以下几点,stoi在我看来更具可读性:

int x = stoi(a) + stoi(b) + stoi(c) + stoi(d);
Run Code Online (Sandbox Code Playgroud)

比:

int x = Utility::stringToInteger(a) + Utility::stringToInteger(b)
        + Utility::stringToInteger(c) + Utility::stringToInteger(d);
Run Code Online (Sandbox Code Playgroud)

要么:

int x = Utility::stringToInteger(a);
x …
Run Code Online (Sandbox Code Playgroud)

c++ macros alias function c-preprocessor

7
推荐指数
2
解决办法
3702
查看次数

Emacs:在具有相同名称但在不同目录中的缓冲区之间切换

我有两个相同名称但在不同目录中的文件:

apples/main.cpp
oranges/main.cpp
Run Code Online (Sandbox Code Playgroud)

我通过一个emacs窗口打开它们 emacs apples/main.cpp oranges/main.cpp

当我C-x b用来在这两个缓冲区之间切换时,缓冲区名称是"main.cpp"和"main.cpp <2>".我希望能够在切换缓冲区时看到这两个文件的完整路径,这样我就可以在苹果和橙子版本之间消除歧义.有没有办法做到这一点?

一种方法是修改在第二个main.cpp之后生成<2>的任何代码,当Emacs检测到具有该名称的缓冲区已经打开时.但是,我找不到怎么做.

emacs buffer autocomplete switch-statement ido-mode

6
推荐指数
2
解决办法
984
查看次数

typedef包含所有默认参数的模板

我声明一个模板化的类,所有参数都有默认参数,例如:

template<typename TYPE = int>
class Foo {};
Run Code Online (Sandbox Code Playgroud)

那么以下两个是等价的:

Foo<int> one;
Foo<> two;
Run Code Online (Sandbox Code Playgroud)

但是,我不允许这样做:

Foo three;
Run Code Online (Sandbox Code Playgroud)

是否可以使用typedef相同的名称但没有括号来实现,如下所示:

typedef Foo<> Foo;
Run Code Online (Sandbox Code Playgroud)

c++ templates default typedef readability

6
推荐指数
2
解决办法
1806
查看次数

C++ 0x错误:使用std :: shared_ptr将函数重载到const参数是不明确的

假设我有两个不相关的AB.我也有一个Bla使用boost::shared_ptr这样的类:

class Bla {
public:
    void foo(boost::shared_ptr<const A>);
    void foo(boost::shared_ptr<const B>);
}
Run Code Online (Sandbox Code Playgroud)

请注意const.这是这个问题的原始版本所缺乏的重要部分.这个编译,以下代码工作:

Bla bla;
boost::shared_ptr<A> a;
bla.foo(a);
Run Code Online (Sandbox Code Playgroud)

但是,如果我在上面的例子中从使用切换boost::shared_ptr到使用std::shared_ptr,我得到一个编译错误,说:

"error: call of overloaded 'foo(std::shared_ptr<A>)' is ambiguous
note: candidates are: void foo(std::shared_ptr<const A>)
                      void foo(std::shared_ptr<const B>)
Run Code Online (Sandbox Code Playgroud)

你能帮我弄清楚为什么编译器无法弄清楚在std :: shared_ptr情况下使用哪个函数,并且可以在boost :: shared_ptr情况下吗?我正在使用Ubuntu 11.04软件包存储库中的默认GCC和Boost版本,这些版本目前是GCC 4.5.2和Boost 1.42.0.

以下是您可以尝试编译的完整代码:

#include <boost/shared_ptr.hpp>
using boost::shared_ptr;
// #include <memory>
// using std::shared_ptr;

class A {};
class B {};

class Bla {
public: …
Run Code Online (Sandbox Code Playgroud)

c++ boost stl overloading shared-ptr

6
推荐指数
2
解决办法
3309
查看次数

C++ Qt反射与复制和分配

由于QObject文档和许多其他人解释,一个QObject有身份,从而隐藏了它的拷贝构造函数和赋值操作符.

但是,我并非源于QObject其动态属性功能或信号/插槽功能.我只想要反思或访问的能力Foo::staticMetaObject.

class Foo : public QObject {
    Q_OBJECT
    Q_ENUMS(Color)
public:
    enum Color { Blue, Red, Pink };
private:
    Color color;
};

Q_DECLARE_METATYPE(Foo::Color)
Run Code Online (Sandbox Code Playgroud)

然后,我无法复制Foo:

Foo a;
Foo b;
a = b;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,允许复制和分配的最佳方法是什么?我是否绝对需要编写复制构造函数和赋值运算符?他们会是什么样子?反思仍然有效吗?

c++ qt copy-constructor assignment-operator qobject

6
推荐指数
1
解决办法
3482
查看次数

将keycode的字符串表示形式转换为Qt :: Key(或任何int)并返回

我想将表示键盘上的键的字符串转换为像Qt :: Key(或其他任何东西)的键码枚举.转换示例如下:

  • "Ctrl"Qt::Key_Control
  • "Up"Qt::Key_Up
  • "a"Qt::Key_A
  • "5"Qt::Key_5

如您所见,上面不仅包括字母数字键,还包括修饰符和特殊键.我没有连接到Qt的键码枚举,但似乎Qt拥有在这个分析功能QKeySequencefromString静态函数(见本直接链接):

QKeySequence fromString(const QString & str, SequenceFormat format);
Run Code Online (Sandbox Code Playgroud)

您可能就像我需要这种转换一样.好吧,我有一个由GhostMouse生成的数据文件.这是我输入内容的日志.这是我输入的一个例子" It ":

{SPACE down}
{Delay 0.08}
{SPACE up}
{Delay 2.25}
{SHIFT down}
{Delay 0.11}
{i down}
{Delay 0.02}
{SHIFT up}
{Delay 0.03}
{i up}
{Delay 0.05}
{t down}
{Delay 0.08}
{t up}
{Delay 0.05}
{SPACE down}
{Delay 0.12}
{SPACE up}
Run Code Online (Sandbox Code Playgroud)

所以我需要一种方法将字符串"SPACE"和表示此数据文件中的键的所有其他字符串转换为唯一的int.

c++ qt keycode type-conversion string-parsing

6
推荐指数
1
解决办法
7376
查看次数

.emacs中区分大小写的setq无效

我的.emacs文件中有很多自定义内容:字体,颜色,窗口大小,键绑定等等.所有这些都有效.

然后在最后,我刚刚添加了:(setq case-fold-search nil).这是一个变量,当设置nil为应该在所有emacs模式下使搜索区分大小写时.它不适合我.

在单个缓冲区中设置case-fold-searchnil有效,但是当我将其设置为时.emacs,它不起作用.是否有理由为什么a中的setq声明.emacs有时可能不起作用?我该如何尝试调试此问题?

variables emacs case-sensitive dot-emacs case-insensitive

5
推荐指数
1
解决办法
507
查看次数

在Ubuntu中自动安装基于包的Perl模块

我想安装特定Perl脚本所需的Perl模块,例如perl-depends工具列出的那些.但是,我想在Ubuntu中使用它apt-get,这意味着通过包存储库而不是通过CPAN安装模块.

大多数类似的问题(例如这个问题)都解决了通过CPAN做到这一点的方法.

ubuntu perl dependencies cpan packages

5
推荐指数
1
解决办法
4928
查看次数

Perl DBI无需访问数据库

我正在INSERT为一个尚不存在的数据库创建一组SQL 语句,我将它们保存到文件中.

如何在不访问特定数据库的情况下使用Perl强大的DBI模块来创建这些INSERT语句.特别是,看起来使用该$dbh->quote()函数需要我实例化$dbh与数据库的连接.

mysql sql database perl dbi

5
推荐指数
1
解决办法
1729
查看次数

保存动态PHP页面以供离线查看

我有一个PHP页面foo.php,它从MySQL数据库中提取记录并以一种很好的方式显示它们.棘手的部分是我在顶部有链接,如"按名称排序"链接到foo.php?sort=name.

我的一般问题是,如果我有几个POST变量sort,有一个指数的可能页面(在我的情况下几百).有没有一种方法可以保存所有这些页面以供离线查看?在没有更好的解决方案的情况下,我想我可以使用像wget这样的工具来下载页面的所有可能组合.如果这是解决方案,您能为这项任务推荐更好的工具吗?

编辑:回答我为什么需要这个的问题:我有一个动态的会议ISPC 20程序,我需要发送给usb闪存驱动器上的人.在这种情况下,我不认为提供WAMP解决方案是一种选择.

php mysql wget web-scraping offline-browsing

5
推荐指数
1
解决办法
1018
查看次数