小编Olu*_*ide的帖子

使用enable_if"伪造"模板类方法专门化

我想知道SFINAE原则/ enable_if是否可以用来"伪造"类模板方法的部分特化.例如,给定Foo其中Foo::bar定义了两个版本的类模板.如果T2 = int(例如)我想启用一个并禁用另一个,反之亦然.

template<typename T1, typename T2>
struct Foo
{
    void bar();
};

// Enable if T2 != int (disable otherwise)
template<typename T1, typename T2>
void Foo<T1,T2>::bar()
{
}

// Enable if T2 == int (disable otherwise)
template<typename T1, typename T2>
void Foo<T1,T2>::bar()
{
}
Run Code Online (Sandbox Code Playgroud)

PS:请提升enable_if首选.谢谢.

c++ templates sfinae enable-if

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

具有重复奇数的整数列表

鉴于名单0,以N连续的整数,其中N的偶数,如A = [0 , 1 , 2 , 3 , 4]我在寻找一个列表理解,即类型[a for a in A],创建另一个列表B = [0 , 1 , 1 , 2 , 3 , 3 , 4]是重复输入列表中的奇数,A.

python

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

成员函数模板参数默认值

以下位代码在GCC 4.5.3中编译,但不在VS 2008和2010中编译.这是由于VS编译器错误还是标准禁止给出默认函数模板参数值?

#include <cstdlib>

struct Bar
{
    enum Group{ A , B , C };
};

struct Foo
{
    template<typename T>
    static void getSome( typename T::Group = T::A );
};

template<typename T>
void Foo::getSome( typename T::Group )
{
};

int main()
{
    Foo::getSome<Bar>();            // Does not compile in VS 2008 & 2010 (compiles in gcc 4.5.3)
    Foo::getSome<Bar>( Bar::C );    // Compiles in VS 2008 and gcc 4.5.3
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

错误信息

prog.cpp(11) : error C2589: '::' : illegal token …
Run Code Online (Sandbox Code Playgroud)

c++ templates function-templates default-arguments

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

使用布局创建自动缩放Qt UI

我很感激建议如何创建一个由四个布局组成的Qt UI并具有以下属性.

  1. UI的高度的任何增加都被布局吸收,如下所示 在此输入图像描述

  2. UI高度的任何进一步减小都被特定布局的内容所吸收,例如下面所示的两个大按钮 在此输入图像描述

user-interface qt qlayout

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

类无法与不在其命名空间中的函数交朋友

我很难理解为什么以下MWE无法编译:

#include <iostream>

namespace N
{
    class Foo
    {
        friend void bar( Foo& f );
        void print(){ std::cout << "..." << std::endl; }    // private by default
    };  
}

void bar( N::Foo& f )
{
    f.print();
}

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

g ++ 4.8.2错误

Test.cpp: In function ‘void bar(N::Foo&)’:
Test.cpp:8:8: error: ‘void N::Foo::print()’ is private
   void print(){ std::cout << "..." << std::endl; } // private by default
        ^
Test.cpp:14:10: error: within this context
Run Code Online (Sandbox Code Playgroud)

我几乎肯定在这里遗漏了一些东西,但肯定朋友的功能bar()可以访问该类的任何私人成员N::Foo.

注意:

  1. 移动 …

c++ namespaces argument-dependent-lookup

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

有效的方法来反转三个连续的子范围[A,B,C] - > [C,B,A]

我有一个由三个连续的子阵列A,B和C组成的数组[A,B,C].我想将较大的数组反转为[C,B,A].我目前的尝试涉及你的呼叫std::rotate,如下所示.我想知道是否有更简单/有效的方法来实现这一点,最好使用std算法.

Step 1: "swap" sub-array B,C
[A,B,C] -> [A|B,C] -> [A,C,B]

Step 2: "swap" sub-array A,C
[A,C,B] -> [A,C|B] -> [C,A,B]

Step 3: "swap" sub-array A,B
[C,A,B] -> [C|A,B] -> [C,B,A]
Run Code Online (Sandbox Code Playgroud)

编辑

例如,给定数组[1,2,3|4,5,6|7,8,9]我想"反转"它[7,8,9|4,5,6|1,2,3]

示例实施.请注意,"范围"的大小仅仅是说明性的.

c++ stl stl-algorithm

-1
推荐指数
1
解决办法
98
查看次数