所以我有几个类定义:
class StatLogger {
public:
StatLogger();
~StatLogger();
bool open(<parameters>);
private:
<minutiae>
};
Run Code Online (Sandbox Code Playgroud)
并且从它下降的子类实现一个空对象模式(未打开它是它自己的空对象)
class NullStatLogger : public StatLogger {
public:
NullStatLogger() : StatLogger() {}
};
Run Code Online (Sandbox Code Playgroud)
然后我有第三个类,我想在其构造函数中采用可选的logger实例:
class ThirdClass {
public:
ThirdClass(StatLogger& logger=NullStatLogger());
};
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我按上述方式执行时,我得到:
错误:"StatLogger&"类型参数的默认参数类型为"NullStatLogger"
如果我在定义中放置一个显式的强制转换,我得到:
错误:没有用于调用'StatLogger :: StatLogger(NullStatLogger)的匹配函数
抱怨没有来自NullStatLogger的构造函数,即使它是子类.我在这里做错了什么,这在C++中是否允许?
我正在尝试提出一种算法,该算法允许我生成一个随机的 N 维实值向量,该向量与一组已生成的向量线性无关。我不想强迫它们正交,只是线性独立。我知道 Graham-Schmidt 存在于正交化问题中,但是是否有更弱的形式只能给出线性独立向量?
例如,假设我有一个函数可以为您交换 32 位值中的字节:
uint32_t byte_swap(uint32_t in);
Run Code Online (Sandbox Code Playgroud)
嗯,将 32 位值压入堆栈并再次将其弹出似乎很愚蠢,特别是如果我们要多次调用此函数,所以让我们通过 ECX 传递它:
#if __FASTCALL_SUPPORTED_ /* Whatever this may be */
#define FASTCALL __attribute__((fastcall))
#else
#define FASTCALL
#endif
uint32_t FASTCALL byte_swap(uint32_t in);
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,将该函数编译到共享库中进行分发是否安全?如果用户使用不同的编译器来编译他们的程序并链接到此,该函数是否仍然可以正确调用?
例如,如果我有
<form name="blah">
<input name="1"/>
<input name="2"/>
<table>
<tr>
<td>
<unkown number of levels more>
<input name="3"/>
</td>
</tr>
<table>
</form>
Run Code Online (Sandbox Code Playgroud)
如何组合将返回输入1,2和3的查询?
编辑:我应该注意到我对抓取页面上的所有输入元素不感兴趣,我只想要所有输入元素都是特定形式的子元素,所以"//"就是正确的.
我有一个来自QWidget的自定义小部件,我希望能够放到这个小部件上,当拖动悬停在小部件上时,我想突出显示它以向用户提供一些视觉反馈.在我看来,最简单的方法是突出显示何时调用dragEnterEvent并在拖动退出窗口小部件时取消强调,但是如何捕获拖动出口?似乎没有dragExitEvent事件处理程序.
我有一个带有QVBoxLayout的QFrame,我将自己的自定义小部件添加到布局中以模拟QListWidget,但项目中包含更多信息/功能.我将小部件添加到布局中并在成员变量中保留引用(这是Python):
self.sv_widgets[purchase.id] = widget
self.vl_seatView.addWidget(widget)
Run Code Online (Sandbox Code Playgroud)
然后当我完成一个项目时,我想从屏幕上删除它并清理引用:
self.vl_seatView.removeWidget(self.sv_widgets[purchase.id])
del self.sv_widgets[purchase.id]
Run Code Online (Sandbox Code Playgroud)
不幸的是,小部件仍然显示在屏幕上!我已经检查过,我只将它添加到布局一次(实际上只显示了一个副本),尝试在布局上手动调用update(),但无济于事.这样做的正确方法是什么?
所以我有一个名为stats的应用程序,它允许我以各种方式查询我的数据库并以JSON格式返回信息,因此我可以有一个很好的ajaxy仪表板用于绘图和可视化.我希望这个应用程序尽可能可重用,所以我不想在其视图上使用@login_required装饰器.但是,在我的情况下,我确实希望在查看任何应用视图之前需要登录.有没有办法在视图之外的某个地方执行此操作?
也许在我的网站的urls.py中有这样的东西?(我知道这不起作用,我正在寻找的一个例子)
urlpatterns = patterns('',
(r'^stat/', include('stats.urls'), login_required),
)
Run Code Online (Sandbox Code Playgroud) 在解析器组合库上工作,这个例子来源于此,但显然有些名称已被更改以保护无辜者:
#include <string>
#include <stdio.h>
using namespace std;
template <typename T> struct only_string;
template <> struct only_string<string> {};
struct another_type {
explicit operator bool() const { return true; }
};
// only substitute if T is string
template <typename T>
bool operator !(T) {
only_string<T> a;
return true;
}
int main() {
another_type a;
if (!a) {
return 1;
} else {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个模板操作员!应该只在T是字符串时替换,而另一种类型在其上有bool操作符.如果我试着打电话给a,它首先找到操作员,无法替换并放弃.谁能解释这种行为以及如何纠正它?
这是g ++ 5.4.0的输出
> g++ -std=c++11 test.cc -o test
test.cc: In instantiation of …Run Code Online (Sandbox Code Playgroud) 这:
\n\ntemplate <typename T>\nstruct base {\n T a;\n};\n\ntemplate <typename T>\nstruct derived : base<T> {\n derived(T v) : a(v) {} // xxx: how?\n};\n\nint main() {\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n繁荣:
\n\ntest.cc: In constructor \xe2\x80\x98derived<T>::derived(T)\xe2\x80\x99:\ntest.cc:12:20: error: class \xe2\x80\x98derived<T>\xe2\x80\x99 does not have any field named \xe2\x80\x98a\xe2\x80\x99\n derived(T v) : a(v) {} // xxx: how?\nRun Code Online (Sandbox Code Playgroud)\n\na(v)如果我用它替换{ this->a = v; }就可以了,有什么方法可以从派生类的初始值设定项列表中初始化模板化基类的成员吗?
我有一个数据类型,其中包含一些信息,并且可能会也可能不会存储额外的数据。我们称之为碎片。我定义了一个具有一些常见功能的基类:
class ShardBase {
public:
virtual void Frobnicate() = 0;
};
Run Code Online (Sandbox Code Playgroud)
我想定义一个模板化的子类,允许访问额外的数据:
template <typename T=void>
class Shard : public ShardBase {
public:
virtual const T& value() const = 0;
};
Run Code Online (Sandbox Code Playgroud)
但我想处理没有额外数据的情况,所以我可以将 Shard 专门用于void:
template <>
class Shard<void> : public ShardBase {};
Run Code Online (Sandbox Code Playgroud)
现在Shard<int>有了一个value()方法并且Shard<>只有基本功能。
我想做的是继承Shard<T>自Shard<void>,以便在任何不需要特定类型信息的地方,我都可以将const Shard<>&. 我知道在这种情况下我可以只使用 a const ShardBase&,但我想Shard<>与其他地方的 API 保持对称。
如果我做这样的事情:
template <typename T>
class Shard : public Shard<void> { …Run Code Online (Sandbox Code Playgroud)