小编Vin*_*ent的帖子

CMake:检测文件中的"Q_OBJECT"并将其添加到MOC要处理的文件列表中

目前,我MYPROJECT_CURRENT_HEADERS在CMake中使用一个变量来列出所有标题.当我使用Qt时,我的CMakeLists.txt包含:

QT4_WRAP_CPP(MYPROJECT_CURRENT_MOC ${MYPROJECT_CURRENT_HEADERS})
Run Code Online (Sandbox Code Playgroud)

问题是所有标头都由moc处理,即使那些没有Q_OBJECT:所以它生成许多空文件.

是否有"grep"/检测文件是否包含字符串的解决方案Q_OBJECT,如果是这种情况,请将其添加到MYPROJECT_CURRENT_MOC

谢谢

qt qt4 cmake

7
推荐指数
2
解决办法
2485
查看次数

在C++ Qt应用程序中嵌入Python/Numpy/Matplotlib?

我目前正在研究一个小型的C++ Qt 4.8(以及它何时发布的5.0)科学应用程序,我想知道是否有可能嵌入Python + Numpy + Maptplotlib(并且即使没有人也可以使用便携式应用程序)在C++ Qt应用程序中安装Python,以便在我的应用程序中创建漂亮的图形?

有没有这样的教程/示例?

非常感谢你.

PS:我不得不生成临时文件,但重要的是用户不必安装python.

c++ python qt matplotlib

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

为什么我们必须为具有默认参数的模板类指定<>?

我在C++中发现了令人讨厌的东西,我不知道是否有一个技巧可以避免这种情况而没有开销.问题如下:

对于模板功能,我们可以:

// Function declaration/definition
template<bool Option = false> void myFunction() 
{
    std::cout<<"Option = "<<Option<<std::endl;
}

// Then I can use :
myFunction<false>();
myFunction<true>();
myFunction(); // <- NO PROBLEM HERE
Run Code Online (Sandbox Code Playgroud)

现在换一个模板类:

// Class definition/declaration
template<bool Option = false> class MyClass
{
};

// Then I can use :
myClass<false> x;
myClass<true> y;
myClass z; // <- PROBLEM HERE : only "MyClass<> z;" will compile !
Run Code Online (Sandbox Code Playgroud)

为什么这种行为的原因?有什么诀窍可以避免吗?对于将optionnal参数作为模板传递的类,我发现这对最终用户来说不方便:他应该能够将默认实现用作非模板化类...

c++ templates class default-value c++11

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

std :: streampos,std :: streamoff和std :: streamsize到long long int?

为了测量流的位置/偏移/尺寸,标准指定std::streampos,std::streamoffstd::streamsize,但它们是实现定义.

如何以long long int安全和便携的方式转换这些类型?(例如,测量文件大小并将其注入一个以long long int作为参数的函数)

c++ file standards-compliance stream c++11

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

GCC错误与否:默认std :: function?

如何将默认函数指定为类成员的参数?

从我的代码派生的当前示例是:

#include <iostream>
#include <functional>

template<typename T> struct C
{
    static T test(std::function<T(int)> f = [](int i){return i;})
    {return f(42);}
};

int main(int argc, char* argv[])
{
    C<int>::test(); // ERROR = internal compiler error : in tsubst_copy, at cp/pt.c:11354
    C<int>::test([](int i){return i;}); // OK
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是GCC的错误吗?

用另一种语法可以避免这个问题吗?

你能在其他C++ 11编译器上尝试吗(对于那些有编译器的人来说)?

c++ compiler-construction lambda c++11 std-function

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

在编译时将std :: array转换为另一种数据类型?

在编译时,C++ 11中是否有一种方法可以将一种类型的数组转换为另一种数据类型:

#include <iostream>
#include <array>
#include <type_traits>

int main()
{
   static constexpr std::array<double, 3> darray{{1.5, 2.5, 3.5}};
   static constexpr std::array<int, 3> iarray(darray); // not working
   // Is there a way to cast an array to another data type ? 
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ arrays casting compile-time c++11

7
推荐指数
2
解决办法
2227
查看次数

标准C++ 11代码等同于PEXT Haswell指令(可能由编译器优化)

Haswell架构提出了几条新指令.其中一个是PEXT(并行位提取),其功能由此图像解释(源于此处):

PEXT

它需要一个值r2和一个掩码r3,并将提取的位r2放入r1.

我的问题如下:纯标准 C++ 11中优化模板化函数的等效代码是什么,将来可能会被编译器优化为该指令.

c++ bit-manipulation instruction-set compiler-optimization c++11

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

最快的函数,用于在无符号整数中将位设置为1

我有一个在超级计算机上进行模拟的算法,需要使用大量的位操作.有些操作需要掩码,特别是这样的函数:

template <typename Type,
          class = typename std::enable_if<std::is_integral<Type>::value>::type,
          class = typename std::enable_if<std::is_unsigned<Type>::value>::type>
inline Type mask(const std::size_t first, const std::size_t last)
{
     // Something
}
Run Code Online (Sandbox Code Playgroud)

这将生成一个类型的掩码,Type其中范围中的位[first, last[被设置为1(first并且last是运行时变量)

例如:

mask<unsigned char>(3, 6) -> 00111000
Run Code Online (Sandbox Code Playgroud)

我将需要数千亿这些掩码,所以我需要尽可能优化这个功能(但在普通的标准C++ 11中).怎么做 ?

c++ optimization bit-manipulation bitmask c++11

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

访问吸气剂的真实基础类型?

我知道吸气剂总体上很糟糕,但在这里,我只是用一个来说明一个更普遍的问题.

考虑以下课程:

template <class... T>
class my_tuple final
{
    private: 
        std::tuple<T...> _data;
    public: 
        template <class... U> 
        my_tuple(U&&... u) 
        : _data(std::forward<U>(u)...) {} 
    public:
        template <std::size_t I>
        auto get() -> decltype(std::get<I>(_data)) 
        {return std::get<I>(_data);}
};
Run Code Online (Sandbox Code Playgroud)

并且考虑到我不能修改这个类.

有没有办法,写一个外部元函数my_tuple_type(通过外部我的意思是一个不属于该类的元函数)来实际获取底层元组的类型?(我倾向于认为如果其中一个T...是参考是不可能的,因为只需应用std::decaystd::remove_reference返回get返回的类型也将删除原始引用).

编辑:我添加了一个构造函数来帮助测试.

EDIT2:为了澄清,我无法操作T...:我只是根据getter搜索元函数.

编辑3:从类的外部,我不知道底层元组成员的名称(这里它被命名_data,但它可能是_tuple或其他)

编辑4:作为一个例子,如果我们假设没有类型是引用/指针,这可以实现:

1)创建一个元函数,它将递归执行getter直到它失败(因此元组大小N将被知道)

2)执行一个std::decay由返回的每个类型std::get0N并把它们放在一起.

但如果其中一个元组元素是引用或指针,它将失败...

编辑5:我将很快发布EDIT4的实现(我正在努力)

编辑6:这不是XY问题.我试图回答的基本问题是:

考虑一个被称为概念的概念,Tuple_like其唯一条件是拥有像这里一样的模板化获取成员.问题是:从这个唯一的功能get<I>(),是否有可能提取底层元组的所有信息?

c++ tuples metaprogramming type-traits c++11

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

为什么`copy_n`,`fill_n`和`generate_n`?

为什么_n版本的copy,fill并且generate已经在C++ 11中提供了,为什么只有这些算法呢?

algorithm standards stl stl-algorithm c++11

7
推荐指数
2
解决办法
541
查看次数