我想在gtk ++中使用与goocanvas相关的lambda表达式.根据我的理解,这意味着我必须能够将我的lambda放在sigc ++ functor中.
我试过这样的事情:
sigc::slot<bool, const Glib::RefPtr<Goocanvas::Item>& , GdkEventMotion* > slot2=
[]( const Glib::RefPtr<Goocanvas::Item>& item, GdkEventMotion* ev)->bool
{
cout << "Lambda " << endl; return false;
};
((Glib::RefPtr<Goocanvas::Item>&)item1)->signal_motion_notify_event().connect( slot2);
Run Code Online (Sandbox Code Playgroud)
但这不会编译.
有没有机会让sigc直接使用lambdas或更好的gtkmm没有sigc ++中间体:-)
如果我使用:
Gtk::Button* button = Gtk::manage( new Gtk::Button(Gtk::Stock::DELETE));
Run Code Online (Sandbox Code Playgroud)
它工作完美,但文档和标题显示:已弃用,使用标签 _Delete
但如果我简单地写
Gtk::Button* button = Gtk::manage( new Gtk::Button("_Delete"));
Run Code Online (Sandbox Code Playgroud)
该按钮仅显示文本_Delete。
如何以“新”时尚创建标准按钮?
更新:根本没有计划让 gtk 中的任何东西变得自动化。开发者邮件列表上进行了长时间的讨论。他们决定不再更换库存物品。这简单的意思就是:所有的事情自己做!:-(
我阅读了http://www.stroustrup.com/C++11FAQ.html#unions
但我无法编译给定的例子:
union U1 {
int m1;
complex<double> m2; // ok
};
union U2 {
int m1;
string m3; // ok
};
U1 u; // ok
u.m2 = {1,2}; // ok: assign to the complex member
Run Code Online (Sandbox Code Playgroud)
结果是:
main.cpp:85:8: error: use of deleted function 'U1::U1()'
U1 u; // ok
^
main.cpp:75:11: note: 'U1::U1()' is implicitly deleted because the default definition would be ill-formed:
union U1 {
^
main.cpp:77:25: error: union member 'U1::m2' with non-trivial 'constexpr std::complex<double>::complex(double, double)'
complex<double> m2; // …Run Code Online (Sandbox Code Playgroud) 我有一个算法,“有时”不会破坏递归并最终导致堆栈溢出。现在我想调试这种情况。gdb 直接将我指向覆盖堆栈边界的行,但不可能获得堆栈跟踪,因为 gdb 需要无尽的时间来展开堆栈并将其显示在 ddd 中。
我现在只想减少堆栈大小以更早地获得损坏。所以我需要一种方法来减少我正在运行的任务的堆栈。不涉及任何线程,因此应该不是什么大问题。
但我不知道 gdb 本身是否有一个选项来操纵堆栈(大小)本身,或者我需要在程序启动时以编程方式更改大小,或者我可以在启动后从操作系统命令行(linux)减小大小调试会话。
如果 gdb 有这样的选项,也许调用树达到最大深度时也可能停止。
我想写一个template class用SFINAE检查特征的东西.
正如我在帖子中所读到的那样,类不能"重载":模板重载和SFINAE只能处理函数但不能处理类
我写了以下代码:
class AA { public: using TRAIT = int; };
class BB { public: using TRAIT = float; };
template < typename T, typename UNUSED = void> class X;
template < typename T>
class X<T, typename std::enable_if< std::is_same< int, typename T::TRAIT>::value, int >::type>
{
public:
X() { std::cout << "First" << std::endl; }
};
template < typename T>
class X<T, typename std::enable_if< !std::is_same< int, typename T::TRAIT>::value, unsigned int >::type>
{
public:
X() { std::cout …Run Code Online (Sandbox Code Playgroud) 我尝试了boost msm lite,这是一个非常好的状态机实现.一如既往,我试着理解它是如何工作的,并找到了一个我无法理解的代码片段.
作为一个评论:我不会在这里发布来自boost的整个文件,它在这里:https://github.com/boost-experimental/msm-lite/blob/master/include/boost/msm-lite.hpp
测试代码仅用于理解窗帘背后的事物:
auto x2 = "test"_t; //compiles fine!
Run Code Online (Sandbox Code Playgroud)
这应该转到这个代码片段:
template <class T, T... Chrs>
auto operator""_t() BOOST_MSM_LITE_NOEXCEPT {
return event<aux::string<Chrs...>>; // ??? How this can work?
}
Run Code Online (Sandbox Code Playgroud)
我(错误)的理解是,它将返回type而不是类型的实例?但它编译......为什么?
event 定义为:
template <class>
struct event {
template <class T, BOOST_MSM_LITE_REQUIRES(concepts::callable<bool, T>::value)>
auto operator[](const T &t) const BOOST_MSM_LITE_NOEXCEPT {
return transition_eg<event, T>{*this, t};
} template <class T, BOOST_MSM_LITE_REQUIRES(concepts::callable<void, T>::value)>
auto operator/(const T &t) const BOOST_MSM_LITE_NOEXCEPT {
return transition_ea<event, T>{*this, t};
}
};
Run Code Online (Sandbox Code Playgroud)
以下示例编译正常:
#include …Run Code Online (Sandbox Code Playgroud) 如果我尝试在 Qt Creator 中打开现有项目,我总是会收到“未找到有效套件”的信息。
我发现了很多关于此的问答,但在我的安装中,我无法选择有效的 Qt 版本,因为:
在“构建&运行”->“儿童”->“桌面”->“QtVersion”中:无
我在该字段中看不到任何其他条目。
正如已经提到的:它是 Fedora 25 x86_64 版本。
Qt Creator 在命令行中给出:
警告:找不到套件“qt.57.gcc_64_kit”。继续。
这是一个应该存在于某处的文件吗?可以在某处下载吗?手动配置似乎是不可能的,因为无法选择qt版本。
是否有我没有安装的软件包?是否有任何元包可用于获得有效的安装?
我安装了什么:
rpm-qa| grep qt5
dbusmenu-qt5-0.9.3-0.11.20150604.fc24.x86_64
qt5-qtbase-gui-5.7.0-3.fc25.x86_64
qt5-qtwebchannel-5.7.0-2.fc25.x86_64
qt5-qttools-static-5.7.0-3.fc25.x86_64
qt5-qtconfiguration-devel-0.3.1-2.fc24.x86_64
adwaita-qt5-0.4-3.fc25.x86_64
qt5-qtsvg-devel-5.7.0-2.fc25.x86_64
qt5-qtbase-common-5.7.0-3.fc25.noarch
qt5-qtlocation-devel-5.7.0-2.fc25.x86_64
qt5-qttools-libs-designer-5.7.0-3.fc25.x86_64
qt5-qtx11extras-devel-5.7.0-2.fc25.x86_64
qt5-qtserialport-5.7.0-2.fc25.x86_64
qt5-qttools-devel-5.7.0-3.fc25.x86_64
qt5-qtconfiguration-0.3.1-2.fc24.x86_64
qt5-qtwayland-devel-5.7.0-2.fc25.x86_64
qt5-qttools-libs-clucene-5.7.0-3.fc25.x86_64
qt5-qtlocation-5.7.0-2.fc25.x86_64
quazip-qt5-0.7.2-1.fc25.x86_64
qt5-qttools-libs-designercomponents-5.7.0-3.fc25.x86_64
qt5-qttools-5.7.0-3.fc25.x86_64
qt5-qtenginio-devel-1.6.1-2.fc25.x86_64
qt5-linguist-5.7.0-3.fc25.x86_64
qt5-qtwebsockets-devel-5.7.0-1.fc25.x86_64
qt5-qtconnectivity-devel-5.7.0-2.fc25.x86_64
qt5-qtsvg-5.7.0-2.fc25.x86_64
qt5-qtquickcontrols-5.7.0-1.fc25.x86_64
qt5-qtwayland-5.7.0-2.fc25.x86_64
qt5-devel-5.7.0-9.fc25.noarch
qt5-qtxmlpatterns-5.7.0-2.fc25.x86_64
qt5-qtwebkit-5.7.0-2.fc25.x86_64
qt5-qtserialport-devel-5.7.0-2.fc25.x86_64
qt5-qtaccountsservice-devel-0.6.0-2.fc24.x86_64
qt5-qttools-libs-help-5.7.0-3.fc25.x86_64
qt5-qtmultimedia-5.7.0-2.fc25.x86_64
qt5-qtimageformats-5.7.0-2.fc25.x86_64
qt5-qtsensors-5.7.0-2.fc25.x86_64
qt5-qtdoc-5.7.0-1.fc25.noarch
qt5-designer-5.7.0-3.fc25.x86_64
qt5-qtbase-static-5.7.0-3.fc25.x86_64
qt5-qtenginio-1.6.1-2.fc25.x86_64
qt5-qt3d-5.7.0-2.fc25.x86_64
qt5-qtbase-5.7.0-3.fc25.x86_64
qt5-qtdeclarative-devel-5.7.0-2.fc25.x86_64
qt5-rpm-macros-5.7.0-9.fc25.noarch
qt5-qhelpgenerator-5.7.0-3.fc25.x86_64
qt5-qtwebsockets-5.7.0-1.fc25.x86_64
qt5-qtconnectivity-5.7.0-2.fc25.x86_64
phonon-qt5-4.9.0-3.fc25.x86_64
qt5-qtscript-5.7.0-2.fc25.x86_64
qt5-qtwebchannel-devel-5.7.0-2.fc25.x86_64
qt5-gstreamer-devel-1.2.0-11.fc25.x86_64
qt5-qtaccountsservice-0.6.0-2.fc24.x86_64
phonon-qt5-backend-gstreamer-4.9.0-1.fc25.x86_64
qt5-qtscript-devel-5.7.0-2.fc25.x86_64
qt5-qtbase-devel-5.7.0-3.fc25.x86_64
qt5-qtx11extras-5.7.0-2.fc25.x86_64 …Run Code Online (Sandbox Code Playgroud) 如果我使用像absolute()我总是得到一个包含引号的路径的函数.
文件系统函数中是否有一种方法可以删除此引号,使其能够与std :: ifstream一起使用?
fs::path p2 { "./test/hallo.txt" };
std::cout << "absolte to file : " << fs::absolute(p2) << std::endl;
Run Code Online (Sandbox Code Playgroud)
收益:
Run Code Online (Sandbox Code Playgroud)"/home/bla/blub/./test/hallo.txt"
我需要
Run Code Online (Sandbox Code Playgroud)/home/bla/blub/./test/hallo.txt
代替.
手动执行它没有问题,但我想询问文件系统库中是否有方法.
当我的磁盘在访问 git 存储库时报告了一长串“不可恢复的读取错误”后,我担心我对其他存储库进行了一些推送,这些存储库可能会将错误的内容转发给它们。顺便说一句,在使用提交/推/拉访问存储库时,没有任何 git 命令报告任何错误。但是在访问存储库后,我总是会收到dmesg磁盘上出现不可恢复的读取错误的新条目。所以肯定有一些文件受到影响,但可能内容是多余的。
我知道:
git fsck --full
Run Code Online (Sandbox Code Playgroud)
将检查回购协议,但我想问:
没有报告任何错误(也许一些悬空提交/斑点在我读到时并不重要)意味着完整的存储库处于有效状态?特别是不仅引用和文件存在,而且所有文件的内容都有效?我找不到的是,有类似校验和的东西可以验证 git 数据库中存储的所有对象的完整内容。
如果我尝试将日期设置为a tm,std::get_time但没有任何反应,则输入流处于失败状态,这意味着已发生解析错误。
以下代码有什么问题?
{ // setting time works
std::tm t{};
std::istringstream ss("01:02:03");
ss.imbue(std::locale("de_DE"));
ss >> std::get_time(&t, "%H:%M:%S");
std::cout << ss.fail() << std::endl;
std::cout << std::put_time(&t, "%c") << '\n';
}
{ // setting day of month did not work
std::tm t{};
std::istringstream ss("2");
ss.imbue(std::locale("de_DE"));
ss >> std::get_time(&t, "%d");
std::cout << ss.fail() << std::endl;
std::cout << std::put_time(&t, "%c") << '\n';
}
Run Code Online (Sandbox Code Playgroud)
输出:
0
Sun Jan 0 01:02:03 1900
1
Sun Jan 0 00:00:00 1900
Run Code Online (Sandbox Code Playgroud)