目前,我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?
谢谢
我目前正在研究一个小型的C++ Qt 4.8(以及它何时发布的5.0)科学应用程序,我想知道是否有可能嵌入Python + Numpy + Maptplotlib(并且即使没有人也可以使用便携式应用程序)在C++ Qt应用程序中安装Python,以便在我的应用程序中创建漂亮的图形?
有没有这样的教程/示例?
非常感谢你.
PS:我不得不生成临时文件,但重要的是用户不必安装python.
我在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参数作为模板传递的类,我发现这对最终用户来说不方便:他应该能够将默认实现用作非模板化类...
为了测量流的位置/偏移/尺寸,标准指定std::streampos,std::streamoff和std::streamsize,但它们是实现定义.
如何以long long int安全和便携的方式转换这些类型?(例如,测量文件大小并将其注入一个以long long int作为参数的函数)
如何将默认函数指定为类成员的参数?
从我的代码派生的当前示例是:
#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++ 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) Haswell架构提出了几条新指令.其中一个是PEXT(并行位提取),其功能由此图像解释(源于此处):

它需要一个值r2和一个掩码r3,并将提取的位r2放入r1.
我的问题如下:纯标准 C++ 11中优化模板化函数的等效代码是什么,将来可能会被编译器优化为该指令.
c++ bit-manipulation instruction-set compiler-optimization c++11
我有一个在超级计算机上进行模拟的算法,需要使用大量的位操作.有些操作需要掩码,特别是这样的函数:
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中).怎么做 ?
我知道吸气剂总体上很糟糕,但在这里,我只是用一个来说明一个更普遍的问题.
考虑以下课程:
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::decay或std::remove_reference返回get返回的类型也将删除原始引用).
编辑:我添加了一个构造函数来帮助测试.
EDIT2:为了澄清,我无法操作T...:我只是根据getter搜索元函数.
编辑3:从类的外部,我不知道底层元组成员的名称(这里它被命名_data,但它可能是_tuple或其他)
编辑4:作为一个例子,如果我们假设没有类型是引用/指针,这可以实现:
1)创建一个元函数,它将递归执行getter直到它失败(因此元组大小N将被知道)
2)执行一个std::decay由返回的每个类型std::get从0到N并把它们放在一起.
但如果其中一个元组元素是引用或指针,它将失败...
编辑5:我将很快发布EDIT4的实现(我正在努力)
编辑6:这不是XY问题.我试图回答的基本问题是:
考虑一个被称为概念的概念,Tuple_like其唯一条件是拥有像这里一样的模板化获取成员.问题是:从这个唯一的功能get<I>(),是否有可能提取底层元组的所有信息?
为什么_n版本的copy,fill并且generate已经在C++ 11中提供了,为什么只有这些算法呢?
c++ ×8
c++11 ×8
qt ×2
algorithm ×1
arrays ×1
bitmask ×1
casting ×1
class ×1
cmake ×1
compile-time ×1
file ×1
lambda ×1
matplotlib ×1
optimization ×1
python ×1
qt4 ×1
standards ×1
std-function ×1
stl ×1
stream ×1
templates ×1
tuples ×1
type-traits ×1