小编Kla*_*aus的帖子

将lambda与sigc库结合使用

我想在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 ++中间体:-)

c++ lambda gtkmm libsigc++ c++11

5
推荐指数
2
解决办法
1824
查看次数

Gtk::带有标准图标的按钮

如果我使用:

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 中的任何东西变得自动化。开发者邮件列表上进行了长时间的讨论。他们决定不再更换库存物品。这简单的意思就是:所有的事情自己做!:-(

gtk gtkmm

5
推荐指数
2
解决办法
4488
查看次数

c ++ 11无限制工会的例子

我阅读了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)

unions c++11

4
推荐指数
1
解决办法
3418
查看次数

减少调试会话中的堆栈大小以捕获无限递归

我有一个算法,“有时”不会破坏递归并最终导致堆栈溢出。现在我想调试这种情况。gdb 直接将我指向覆盖堆栈边界的行,但不可能获得堆栈跟踪,因为 gdb 需要无尽的时间来展开堆栈并将其显示在 ddd 中。

我现在只想减少堆栈大小以更早地获得损坏。所以我需要一种方法来减少我正在运行的任务的堆栈。不涉及任何线程,因此应该不是什么大问题。

但我不知道 gdb 本身是否有一个选项来操纵堆栈(大小)本身,或者我需要在程序启动时以编程方式更改大小,或者我可以在启动后从操作系统命令行(linux)减小大小调试会话。

如果 gdb 有这样的选项,也许调用树达到最大深度时也可能停止。

c++ linux stack-overflow recursion gdb

4
推荐指数
1
解决办法
1010
查看次数

SFINAE专业班

我想写一个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)

c++ sfinae c++14

4
推荐指数
1
解决办法
139
查看次数

如何返回一个类型而不是一个对象是有效的,误解了一个代码片段

我尝试了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)

c++ boost c++14

4
推荐指数
1
解决办法
150
查看次数

Fedora 25 上的 Qt Creator:“未找到有效的套件”

如果我尝试在 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)

qt qt-creator fedora-25

4
推荐指数
1
解决办法
6922
查看次数

如何从std :: filesystem :: path中删除引号

如果我使用像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)

收益:

"/home/bla/blub/./test/hallo.txt"
Run Code Online (Sandbox Code Playgroud)

我需要

/home/bla/blub/./test/hallo.txt
Run Code Online (Sandbox Code Playgroud)

代替.

手动执行它没有问题,但我想询问文件系统库中是否有方法.

c++ c++17 std-filesystem

4
推荐指数
1
解决办法
560
查看次数

检查 git 存储库的完整性

当我的磁盘在访问 git 存储库时报告了一长串“不可恢复的读取错误”后,我担心我对其他存储库进行了一些推送,这些存储库可能会将错误的内容转发给它们。顺便说一句,在使用提交/推/拉访问存储库时,没有任何 git 命令报告任何错误。但是在访问存储库后​​,我总是会收到dmesg磁盘上出现不可恢复的读取错误的新条目。所以肯定有一些文件受到影响,但可能内容是多余的。

我知道:

git fsck --full 
Run Code Online (Sandbox Code Playgroud)

将检查回购协议,但我想问:

没有报告任何错误(也许一些悬空提交/斑点在我读到时并不重要)意味着完整的存储库处于有效状态?特别是不仅引用和文件存在,而且所有文件的内容都有效?我找不到的是,有类似校验和的东西可以验证 git 数据库中存储的所有对象的完整内容。

git

4
推荐指数
1
解决办法
4677
查看次数

std :: get_time没有解析日期

如果我尝试将日期设置为a tmstd::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)

c++ datetime

4
推荐指数
1
解决办法
250
查看次数