小编Olu*_*ide的帖子

专门用于命名空间中的类的方法模板

我正在使用以下编译时'技巧'(基于ADL)来创建一个仅由同一名称空间中的类有效/定义/可调用的函数.

    namespace Family1
    {
        struct ModelA{};
        struct ModelB{};

        template<typename T>
        bool is_in_Family1(T const& t) 
        {
            return true;
        }
    };

    namespace Family2
    {
        struct ModelC{};

        template<typename T>
        bool is_in_Family2(T const& t) 
        {
            return true;
        }
    };


    Family1::ModelA mA;
    Family2::ModelC mC;

    is_in_Family1(mA);          // VALID
    is_in_Family1(mC);          // ERROR
Run Code Online (Sandbox Code Playgroud)

现在,我想使用这个原则(或类似的东西),以便Foo::Bar为属于每个命名空间的类产生(下面)的特化(例如)Family1.

    // I would like to specialize the method template Bar for classes in Family1 
    // namespace; and another specialization for classes in Family2 namespace
    struct Foo
    {
        template<typename T>
        void …
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae

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

在Eclipse CDT中指定外部Makefile选项

我想(暂时)将一个C++项目从Netbeans迁移到Eclipse(为了使用Eclipse的并行调试器).到目前为止,我已经在Eclipse中创建了一个"带有现有代码的Makefile项目"项目,该项目引用了Netbeans项目的Makefile /目录.但是,Netbeans项目接受配置选项

make -f Makefile CONF=GNU_Debug
Run Code Online (Sandbox Code Playgroud)

如何将此选项传递给Eclipse中的Makefile?

用于并行应用程序开发人员的Eclipse版 Eclipse - Mars.2发布(4.5.2)

c++ eclipse netbeans makefile eclipse-cdt

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

错误:类模板部分特化包含无法推导的模板参数

我很感激帮助弄清楚我的代码中出现的问题是什么,我已经简化为以下内容:

typedef unsigned short ushort;

template<typename T = ushort*>
struct Foo
{
};

// Specialization -- works when not a specialization
template<
    template<typename,typename> class Container ,
    template<typename , template<typename,typename> class> class MetaFunction
    >
struct Foo<Container<ushort,typename MetaFunction<ushort,Container>::Type> >
{   
    //typedef Container<ushort,typename MetaFunction<ushort,Container>::Type> TestType; // OK
};

int main()
{
}
Run Code Online (Sandbox Code Playgroud)

在编译(gcc 5.4.0)时,我收到错误:

Test.cpp:14:8: error: template parameters not deducible in partial specialization:
 struct Foo<Container<ushort,typename MetaFunction<ushort,Container>::Type> >
        ^
Test.cpp:14:8: note:         ‘template<class, template<class, class> class<template-parameter-2-2> > class MetaFunction’
Run Code Online (Sandbox Code Playgroud)

奇怪的是,Container<ushort,typename MetaFunction<ushort,Container>::Type>专业化的论点似乎是有效的.

c++ templates template-specialization

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

文本评论不会用什么?

我正在编写一个数学和几何密集的图形应用程序.通常,我发现虽然我尽可能地评论我的代码,但是在应用应用程序的其他部分之后,当我再次访问它时(通常用于调试),之前的注释变得难以理解.我开始认为有些情况下文本注释不会做,并且图表是必需的 - 很多都是.

我怀疑这个问题并不新鲜,我想知道其他有经验的开发人员/团队使用的技术.我发现我的许多方法可能需要至少2页的注释和图表来描述.例如,我昨天调试的一种方法处理一条线可以与三角形边相交的五种不同方式.我尽可能地评论了这个方法,但是我担心在我必须调试方法的4个月里,我精心设计的评论是没有意义的.

谢谢,

Olumide

graphics comments

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

使用对其构造函数的成员初始化列表中的对象的引用

是否可以将引用传递给Container其构造函数的成员初始化列表中的对象(类型),以便Container按如下方式初始化成员:( ideone上的代码).

#include <cstdlib>
#include <iostream>

struct Container;

struct Member
{
    Member( Container& container ) : m_container( container )
    {
    }

    Container& m_container;
};

struct Container
{
    Container() : m_member( *this )
    {
    }

    Member m_member;
};

int main()
{
    Container c;
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

代码编译但我不确定它的标准.

c++ constructor pass-by-reference

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

如何在 QT 中创建可拖动的(无边框和无标题)顶级窗口

我很感激帮助在 Qt 中创建具有以下特征的顶级窗口。窗口必须是:

  1. 无边框、无标题且位于桌面上所有其他窗口的顶部(简单)
  2. 可通过单击并拖动其中的任意位置来拖动(这是我需要帮助的)
  3. 拖动时限制在桌面上边框(比较容易)

基本上,我试图将我们的 QT 应用程序折叠到桌面顶部边框上的顶级图标。

qt

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

重载比较运算符==派生类以扩展任意数量的基类

我很欣赏有关如何重载operator==派生类的比较运算符的指针Derived,以这种方式扩展任意数量的基类Base1 , Base2 , Base3 , ...,(参见下面的代码,ideone上的完整版本).我怀疑为了在基类(类型)列表上调用比较,可能会利用MPL for_each或类似的构造.

// Real problem has many more more Base classes
class Derived : public Base1 , public Base2
{
public:
    Derived( unsigned& val1 , unsigned& val2 ) : Base1( val1 ) , Base2( val2 )
    {
    }

    // Can the following sequence of steps be generalized 
    // for an arbitrary number of base classes?
    bool operator==( const Derived& rhs ) const 
    {
        const …
Run Code Online (Sandbox Code Playgroud)

c++ templates operator-overloading boost-mpl

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

关于boost mpl占位符的推理

Boost MPL库文档的教程:元函数和高阶元编程部分说明transform可以像这样调用

typename mpl::transform<D1,D2, mpl::minus<_1,_2> >::type
Run Code Online (Sandbox Code Playgroud)

其中占位符_1,并_2表示,当的变换BinaryOperation被调用时,它的第一个和第二个参数将在所示的位置传递给减_1_2分别.

我已经一遍又一遍地读了这个近一个月,我仍然不明白.

什么样的价值观究竟做占位符_1,并_2有?D1D2?如果是这样,为什么不写mpl::minus<D1,D2>?又考虑到占位符定义为 typedef arg<1> _1;typedef arg<2> _2;,因此原来的表达在我的脑海里

typename mpl::transform<D1,D2, mpl::minus<<arg<1>,<arg<2> > >::type
Run Code Online (Sandbox Code Playgroud)

我确定我正在考虑占位符错误的方式.我在这里感谢一些指导.

c++ boost-mpl

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

使用 QApplication::setStyleSheet 覆盖 Qt 中设置的 QSS 属性

我在其中创建了一个按钮Qt并为其赋予了QSS属性background-color: gray;,而我的外部样式表已将QSS同一按钮的属性设置为background-color: blue;. 当我运行应用程序的按钮显示为灰色,即使样式表应用于之后QWidget::show()被调用和之前QApplication::exec(),如下图所示:

MyWidget w;
w.show();
...
app.setStyleSheet("..."); // contents of external stylesheet
return app.exec();    
Run Code Online (Sandbox Code Playgroud)

是否可以QApplication::setStyleSheet()覆盖QSS分配给Qt.

qt qtstylesheets

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

使用boost asio捕获Ctrl-C

我正在尝试在应用程序中按Ctrl-C,如以下MWE中所示

#include <boost/asio/signal_set.hpp>
#include <iostream>

void handler( const boost::system::error_code& error , int signal_number )
{
    std::cout << "handling signal " << signal_number << std::endl;
}

int main( int argc , char** argv )
{
    boost::asio::io_service io_service;

    // Construct a signal set registered for process termination.
    boost::asio::signal_set signals(io_service, SIGINT );

    // Start an asynchronous wait for one of the signals to occur.
    signals.async_wait( handler );

    char choice;
    while( true )
    {
        std::cout << "Press a key: " << std::endl;
        std::cin >> …
Run Code Online (Sandbox Code Playgroud)

c++ boost signals boost-asio

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