我正在尝试将现有代码调整为64位机器.主要问题是在一个函数中,前一个编码器使用void*参数,该参数在函数本身中转换为合适的类型.一个简短的例子:
void function(MESSAGE_ID id, void* param)
{
if(id == FOO) {
int real_param = (int)param;
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
当然,在64位机器上,我收到错误:
error: cast from 'void*' to 'int' loses precision
Run Code Online (Sandbox Code Playgroud)
我想纠正这个问题,以便它仍然可以在32位机器上运行并且尽可能干净.任何的想法 ?
我想根据GCC的版本包含不同的文件.更准确地说,我想写:
#if GCC_VERSION >= 4.2
# include <unordered_map>
# define EXT std
#elif GCC_VERSION >= 4
# include <tr1/unordered_map>
# define EXT std
#else
# include <ext/hash_map>
# define unordered_map __gnu_cxx::hash_map
# define EXT __gnu_cxx
#endif
Run Code Online (Sandbox Code Playgroud)
我不关心3.2之前的gcc.
我很确定在预处理时间定义了一个变量,我再也找不到了.
我经常想检查对象是否有成员.一个例子是在函数中创建单例.为此,您可以这样使用hasattr:
class Foo(object):
@classmethod
def singleton(self):
if not hasattr(self, 'instance'):
self.instance = Foo()
return self.instance
Run Code Online (Sandbox Code Playgroud)
但你也可以这样做:
class Foo(object):
@classmethod
def singleton(self):
try:
return self.instance
except AttributeError:
self.instance = Foo()
return self.instance
Run Code Online (Sandbox Code Playgroud)
另一种方法更好吗?
编辑:添加了@classmethod...但请注意,问题不是关于如何制作单例,而是如何检查对象中是否存在成员.
编辑:对于该示例,典型用法是:
s = Foo.singleton()
Run Code Online (Sandbox Code Playgroud)
然后s是类型的对象,Foo每次都相同.并且,通常,该方法被多次调用.
我有一个makefile模板来编译单个DLL(对于插件系统).用户的makefile如下所示:
EXTRA_SRCS=file1 file2
include makefile.in
Run Code Online (Sandbox Code Playgroud)
在makefile.in我有:
plugin.dll: plugin.os $(patsubst %,%.os,$(EXTRA_SRCS))
Run Code Online (Sandbox Code Playgroud)
plugin.os要编译的主要C++文件在哪里.顺便说一句,文件结尾是.os为共享库编译的目标文件(即使用-fpic选项gcc)
现在,问题是额外的源可能(但不一定)是头文件.理想情况下,我想将它们添加为目标plugin.os和它们的依赖项file.cpp,但前提是它们存在.
该方法应适用于Windows和Linux,或至少适用于每个.但是,我只使用了GNU版本的make.
我正在尝试在CLion中运行C++ 11代码,但它不起作用.它说:
...
/projects/CLion/untitled/main.cpp:7:1: note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11
...
Run Code Online (Sandbox Code Playgroud)
我试图设置CMAKE_C_FLAGS到-std=c++11或-std=gnu++11,但我仍然有同样的问题.常规C++代码编译得很好.
我必须在CLion的CMake窗口中设置什么标志来编译我的C++ 11代码?
我有一个Qt4应用程序,菜单条目有快捷方式(没有什么花哨的东西,比如Ctrl+ O 打开文件,Ctrl+ S保存......).使用Qt5编译时,虽然操作附加到菜单栏,但快捷方式不起作用.
如果我将它们添加到工具栏中,它们会再次工作.
有一种简单的方法可以使它工作吗?我还可以将所有这些操作添加到附加到主窗口的操作列表中,但这很容易出错.
我想创建一个域特定语言作为扩充C++语言.我将主要需要两种类型的结构:
该语言将用于科学计算目的,并最终将被翻译成普通的C++.选择C++似乎提供了一个很好的折衷方案:易用性,效率和各种库的可用性.
由于C++语法的复杂性,之前使用flex和bison的尝试失败了.现有的解析器仍然可能在某些构造上失败.所以我们想重新开始,但是要有更好的基础.
你知道类似的项目吗?如果你试图这样做,你会使用什么工具?主要陷阱是什么?你会在语法方面有什么建议吗?
在我的应用程序中,用户可以更改OpenGL格式的属性(即双缓冲,多重采样,各种缓冲区的深度,......).
目前,我的应用程序中只有一个QGLWidget,如果用户更改了任何内容,我会销毁并重新创建窗口小部件.
现在,我想拥有多个小部件.因此,如果格式改变,我需要销毁/重新创建所有小部件.由于小部件可以采用各种配置,因此很难破坏/重新创建它们.那么有没有办法在运行时更改QGLWidget的格式?
或者,有没有办法用另一个替换一个小部件?(即销毁一个小部件并将一个新小部件准确放置在它所用的位置)
我有一个使用在Linux机器上运行的多进程模块的多进程(不是多线程!)应用程序.这个应用程序使用该numpy.linalg.solve函数,如果我尝试创建许多进程,那么我得到错误:
assertion !pthread_create( &(ROOT->pid), ATTR, ROOT->fun, ROOT ) failed, line 84 of file /build/buildd-atlas_3.8.4-9-amd64-jk6dgk/atlas-3.8.4/build/atlas-base/../..//src/pthreads/misc/ATL_thread_tree.c
Run Code Online (Sandbox Code Playgroud)
请注意,在我开始使用函数之前numpy.linalg,我没有遇到任何问题.
知道问题可能是什么?
编辑:我试过用scipy.linalg.solve,问题是一样的!
编辑:通过用blas替换地图集,问题就消失了.所以看来这个问题确实存在于地图集中
我认为以下代码应该工作,但g ++和clang ++都返回完全相同的错误(虽然Visual C++ 2012没有).
#include <iostream>
#include <tuple>
template <int N, typename T>
struct A { };
template <typename Tuple>
double result(const Tuple& t, const A<0, typename std::tuple_element<0, Tuple>::type>& a)
{
return 0;
}
template <typename Tuple>
double result(const Tuple& t, const A<std::tuple_size<Tuple>::value-1,
typename std::tuple_element<std::tuple_size<Tuple>::value-1,Tuple>::type>& a)
{
return 1;
}
template <typename Tuple, int N>
double result(const Tuple& t, const A<N, typename std::tuple_element<N, Tuple>::type>& a)
{
return 0.5;
}
int main()
{
auto a = std::make_tuple(0, 1, 2., 3., …Run Code Online (Sandbox Code Playgroud) c++ ×7
c++11 ×2
gcc ×2
32-bit ×1
64-bit ×1
atlas ×1
c ×1
casting ×1
clion ×1
cmake ×1
compilation ×1
dsl ×1
dynamic ×1
exception ×1
file ×1
gnu-make ×1
hasattr ×1
linux ×1
makefile ×1
numpy ×1
opengl ×1
overloading ×1
parsing ×1
python ×1
qt-designer ×1
qt4 ×1
qt5 ×1
templates ×1
testing ×1
versions ×1