假设我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:关于代码可读性
如果您可能会说这会对代码可读性产生负面影响,我向您保证不会,因为它是一小部分功能使用很多.被广泛知道的一个例子是stoi对stringToInteger.另一种是pdf对probabilityDensityFunction等,所以如果我要做到以下几点,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) 我有两个相同名称但在不同目录中的文件:
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检测到具有该名称的缓冲区已经打开时.但是,我找不到怎么做.
我声明一个模板化的类,所有参数都有默认参数,例如:
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) 假设我有两个不相关的类A和B.我也有一个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) 由于该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)
在这种情况下,允许复制和分配的最佳方法是什么?我是否绝对需要编写复制构造函数和赋值运算符?他们会是什么样子?反思仍然有效吗?
我想将表示键盘上的键的字符串转换为像Qt :: Key(或其他任何东西)的键码枚举.转换示例如下:
"Ctrl" 至 Qt::Key_Control"Up" 至 Qt::Key_Up"a" 至 Qt::Key_A"5" 至 Qt::Key_5如您所见,上面不仅包括字母数字键,还包括修饰符和特殊键.我没有连接到Qt的键码枚举,但似乎Qt拥有在这个分析功能QKeySequence的fromString静态函数(见本直接链接):
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.
我的.emacs文件中有很多自定义内容:字体,颜色,窗口大小,键绑定等等.所有这些都有效.
然后在最后,我刚刚添加了:(setq case-fold-search nil).这是一个变量,当设置nil为应该在所有emacs模式下使搜索区分大小写时.它不适合我.
在单个缓冲区中设置case-fold-search为nil有效,但是当我将其设置为时.emacs,它不起作用.是否有理由为什么a中的setq声明.emacs有时可能不起作用?我该如何尝试调试此问题?
我想安装特定Perl脚本所需的Perl模块,例如perl-depends工具列出的那些.但是,我想在Ubuntu中使用它apt-get,这意味着通过包存储库而不是通过CPAN安装模块.
大多数类似的问题(例如这个问题)都解决了通过CPAN做到这一点的方法.
我正在INSERT为一个尚不存在的数据库创建一组SQL 语句,我将它们保存到文件中.
如何在不访问特定数据库的情况下使用Perl强大的DBI模块来创建这些INSERT语句.特别是,看起来使用该$dbh->quote()函数需要我实例化$dbh与数据库的连接.
我有一个PHP页面foo.php,它从MySQL数据库中提取记录并以一种很好的方式显示它们.棘手的部分是我在顶部有链接,如"按名称排序"链接到foo.php?sort=name.
我的一般问题是,如果我有几个POST变量sort,有一个指数的可能页面(在我的情况下几百).有没有一种方法可以保存所有这些页面以供离线查看?在没有更好的解决方案的情况下,我想我可以使用像wget这样的工具来下载页面的所有可能组合.如果这是解决方案,您能为这项任务推荐更好的工具吗?
编辑:回答我为什么需要这个的问题:我有一个动态的会议ISPC 20程序,我需要发送给usb闪存驱动器上的人.在这种情况下,我不认为提供WAMP解决方案是一种选择.
c++ ×5
emacs ×2
mysql ×2
perl ×2
qt ×2
alias ×1
autocomplete ×1
boost ×1
buffer ×1
cpan ×1
database ×1
dbi ×1
default ×1
dependencies ×1
dot-emacs ×1
function ×1
ido-mode ×1
keycode ×1
macros ×1
overloading ×1
packages ×1
php ×1
qobject ×1
readability ×1
shared-ptr ×1
sql ×1
stl ×1
templates ×1
typedef ×1
ubuntu ×1
variables ×1
web-scraping ×1
wget ×1