在Boost中,有一些方便的功能可以让您在一行中填充容器.
例如,list_of允许您填写类似的列表.
#include <boost/assign/list_of.hpp> // for 'list_of()'
#include <list>
std::list<int> primes = boost::assign::list_of(2)(3)(5)(7)(11);
Run Code Online (Sandbox Code Playgroud)
在我的项目中我使用Qt并且不能使用Boost.有没有一种同样方便的方法来填充Qt的容器在施工点?
我在使用py2app构建我的PySide Python应用程序时遇到了问题(对于OS X).似乎应用程序包上的线程发生了一些有趣的事情.
这是最小的例子
from PySide.QtCore import *
from PySide.QtGui import *
import sys
class App(QApplication):
def __init__(self):
QApplication.__init__(self, sys.argv, True)
self.timer = QTimer(self)
if __name__=='__main__':
app = App()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
从命令行运行:python test.py,这没有错误.然而,当我使用以下setup.py编译它时:
from setuptools import setup
import py2app
import PySide
APP = ['test.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': False,
'includes' : 'PySide',
'resources' : "qt_menu.nib"
}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
Run Code Online (Sandbox Code Playgroud)
这些错误出现在控制台中:
11/05/2013 13:54:20.958 [0x0-0xb37b37].org.pythonmac.unspecified.test: QObject: Cannot create children for a parent that is in …Run Code Online (Sandbox Code Playgroud) 有什么办法可以decltype在C ++宏中进行评估?我的主要动机是创建一个能够确定其类型this并将其转换为字符串的宏。
如果无法使用,decltype是否还有其他方法可以在类声明中使用宏来获取字符串的类类型?
我发现QGLShaderProgram始终无法编译任何着色器,并且没有提供错误日志。以下是症状:
我可以glCompileShader毫无问题地编译着色器。但是,我第一次尝试以这种方式在 QGLShaderProgram失败后进行编译时,失败,并显示以下错误日志:
错误:错误(#270)内部错误:符号表级别
错误错误:0:2:错误(#232)函数声明不能在函数内部发生:
主
错误:错误(#273)2个编译错误。没有生成代码
在那一次失败之后,下一次我尝试使用进行编译时glCompileShader效果很好。
仅从Qt 4.8升级到5.2后才出现问题。在这台机器上没有其他改变。
这是证明问题的我的测试代码:
main.cpp
#include <QApplication>
#include "Test.h"
int main(int argc, char* argv[])
{
QApplication* app = new QApplication(argc, argv);
Drawer* drawer = new Drawer;
return app->exec();
}
Run Code Online (Sandbox Code Playgroud)
测试
#pragma once
#include <qobject>
#include <QTimer>
#include <QWindow>
#include <QOpenGLContext>
#include <QOpenGLFunctions>
class Drawer : public QWindow, protected QOpenGLFunctions
{
Q_OBJECT;
public:
Drawer();
QTimer* mTimer;
QOpenGLContext* mContext;
int …Run Code Online (Sandbox Code Playgroud) 有时在查看优化代码时,我发现仅在循环范围内使用的参数将其声明移到循环之外.
像这样的东西:
A arr[BIG_NUMBER];
// .... //
for (int i=0; i!=BIG_NUMBER; ++i)
{
B b = arr[i].getB();
// ... do some work with b.
}
Run Code Online (Sandbox Code Playgroud)
变成了这个:
A arr[BIG_NUMBER];
// .... //
B b;
for (int i=0; i!=BIG_NUMBER; ++i)
{
b = arr[i].getB();
// ... do some work with b.
}
Run Code Online (Sandbox Code Playgroud)
据推测,我们可以节省不断的重新定标b.但这是否合理呢?根据B是原始类型还是类,答案是否有所不同?
我原以为虽然for循环中变量的范围限制可能会阻止它们在循环外被访问,因为循环的内容存在于同一堆栈帧中,"实际"声明只发生一次.
(注意,我考虑在循环中创建一个对象,但认为这是一个不同的问题,因为它与声明而不是初始化相关的任何成本.)
编辑 - 改进标题
Qt类QImage有两个版本的bits()函数,它返回一个指向底层图像数据的指针.一个是const,另一个不是.以下是非const版本的文档:
返回指向第一个像素数据的指针.这相当于scanLine(0).
请注意,QImage使用隐式数据共享.此函数执行共享像素数据的深层副本,从而确保此QImage是唯一使用当前返回值的QImage.
返回类型是uchar*.
这是否意味着delete当我完成它以避免内存泄漏时,我负责调用此指针?
我在使用某个特定的库时遇到了一些麻烦,我正在尝试测试旧版本是否能解决我的问题.使用存储在.app文件附近的dylib文件动态链接库.这些dylib文件到处都是,我不完全确定我的应用程序实际上正在使用我试图让它使用的那些.
在visual studio上,您可以在调试应用程序时轻松查看已加载的dll文件列表.Xcode中是否有类似的功能?
我无法理解为什么这不会编译:
#include <map>
#include <string>
std::map<std::string, std::string> m;
m["jkl"] = "asdf";
Run Code Online (Sandbox Code Playgroud)
我收到此编译器错误:
Line 5: error: expected constructor, destructor, or type conversion before '=' token
compilation terminated due to -Wfatal-errors.
我发誓我必须在这里遗漏一些简单的东西.
此代码在VS2013和Ideone.com(http://ideone.com/g9P8J7)中编译良好:
#include <list>
#include <iostream>
#include <ostream>
class Foo
{
public:
Foo(int x_ = -1) : x(x_), y(-2.3f) {}
int x;
float y;
};
int main()
{
std::list<int> myList;
myList.push_back(0);
for (auto it = std::begin(myList); it != std::end(myList); ++it)
{
Foo const& c = *it;
std::cout << c.x << ' ' << c.y << std::endl;
// output: 0 -2.3
}
}
Run Code Online (Sandbox Code Playgroud)
给定输出,似乎int from myList通过int构造函数隐式转换为Foo实例,然后绑定到引用变量c.但是这个对象住在哪里?如果它是暂时的,为什么它在下一行仍然有效?
我试图将WPF窗口作为外部应用程序(如记事本)的子窗口附加以提供叠加.研究了我可以在SO和MSDN上找到的所有答案,当我的WPF应用程序运行时,我已经在记事本的角落创建了一个可靠的叠加层.然而,
以下是演示该问题的最小示例:
Overlay.xaml
<Window x:Class="WindowControlTest.Overlay"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300"
Opacity="1"
Background="Azure"
MouseMove="Window_MouseMove"
GotFocus="Window_GotFocus"
Loaded="Window_Loaded"
Title="Overlay"
WindowStyle="None"
>
</Window>
Run Code Online (Sandbox Code Playgroud)
Overlay.xaml.cs
using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Interop;
namespace WindowControlTest
{
public partial class Overlay : Window
{
IntPtr m_ParentHwnd;
HwndSource m_HwndSource;
public Overlay(IntPtr parentHwnd)
{
InitializeComponent();
m_ParentHwnd = parentHwnd;
}
private void Window_MouseMove(object sender, MouseEventArgs e)
{
Console.WriteLine("Overlay.Window_MouseMove: " + e.GetPosition(this));
}
private void Window_GotFocus(object sender, RoutedEventArgs e)
{
Console.WriteLine("Overlay.Window_GotFocus");
}
private void Window_Loaded(object sender, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用boost :: wait_condition来休眠一个线程,直到有一些新数据可用.我的功能减少到这个:
bool Node::waitForNewData() const
{
boost::unique_lock<boost::mutex>(mWasNotifiedMutex);
mWasNotified = false;
while (true)
{
if (mWasNotified)
return true;
if (mThreadIsRequestedToStop)
return false;
mWasNotifiedWaitCondition.wait(mWasNotifiedMutex);
}
}
Run Code Online (Sandbox Code Playgroud)
Boost使用以下消息从wait()函数抛出异常:
boost unique_lock has no mutex: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我正在使用这样的函数来通知等待条件:
void Node::callbackNewDataArrived()
{
{
boost::unique_lock<boost::mutex>(mHasNewInletDataMutex);
mWasNotified = true;
}
mWasNotifiedWaitCondition.notify_all();
}
Run Code Online (Sandbox Code Playgroud)
以及标题中的这些声明:
class Node
{
// ...
mutable bool mWasNotified;
mutable boost::mutex mWasNotifiedMutex;
mutable boost::condition_variable mWasNotifiedWaitCondition;
std::atomic<bool> mThreadIsRequestedToStop;
};
Run Code Online (Sandbox Code Playgroud)
我在Xcode 4.6.2中构建,在OSX 10.8.5上启用了c ++ 11支持.我的boost库是用它构建的
./b2 toolset=clang cxxflags="-std=c++11 -stdlib=libc++ -arch i386 -arch x86_64" macosx-version=10.6 linkflags="-stdlib=libc++" --prefix=/usr/local …Run Code Online (Sandbox Code Playgroud)