我总是在估算成品软件(或编程工作)的成本/价格方面遇到麻烦,所以这里有两个问题.
问题1:
您被要求为现金编写一段代码(一旦您完成,代码的所有权利都属于买方).你知道它需要的大致小时数(+ -25%)和近似的复杂程度(即你是否可以在睡眠中写下它或者一旦你完成就会遭受严重的精神倦怠).产品是用编译语言(C,C++等)编写的.
你(你愿意)为这份工作挑选价格吗?
问题2:
假设你花了几个月写一些东西,这件事现在已经完成,现在想(尝试)卖掉它.
产品将是非常"利基",并且不可能将它出售给大量的人(它是SDK,游戏引擎,库或类似的东西,而不是文本编辑器 - 想要它的人数会很小)."开源"是不可能的.
您知道花费的大致小时数,文件总大小,LoC以及具有整个开发历史记录的存储库.
结果可以在有或没有源代码访问的情况下出售,用于商业或非商业用途,或者您可以(尝试)出售软件权利.
您如何确定以下价格:
情况:
假设我有一个图像A,比如512x512像素,图像B,5x5或7x7像素.两个图像都是24位rgb,B具有1位alpha蒙版(因此每个像素都是完全透明或完全是实心的).
我需要在图像A中找到一个像素(其"邻居")最接近于图像B,或者可能最接近图像B 的像素.
相似度计算为"距离",它是非透明B像素与A像素之间的"距离"之和除以非透明B像素的数量.以下是SDL代码示例:
struct Pixel{
unsigned char b, g, r, a;
};
void fillPixel(int x, int y, SDL_Surface* dst, SDL_Surface* src, int dstMaskX, int dstMaskY){
Pixel& dstPix = *((Pixel*)((char*)(dst->pixels) + sizeof(Pixel)*x + dst->pitch*y));
int xMin = x + texWidth - searchWidth;
int xMax = xMin + searchWidth*2;
int yMin = y + texHeight - searchHeight;
int yMax = yMin + searchHeight*2;
int numFilled = 0;
for (int curY = yMin; curY < yMax; curY++)
for (int …Run Code Online (Sandbox Code Playgroud) 假设有以下目录结构:
projects
|
+--lib1
| |
| +-CMakeFiles.txt
|
+--lib2
| |
| +-CMakeFiles.txt
|
+--test
|
+-CMakeFiles.txt
Run Code Online (Sandbox Code Playgroud)
LIB1/CMakeFiles.txt:
cmake_minimum_required(VERSION 2.0)
add_library(lib1 STATIC lib1.cpp)
Run Code Online (Sandbox Code Playgroud)
LIB2/CMakeFiles.txt:
cmake_minimum_required(VERSION 2.0)
add_subdirectory(../lib1 ${CMAKE_CURRENT_BINARY_DIR}/lib1)
add_library(lib2 STATIC lib2.cpp)
target_link_libraries(lib2 lib1)
Run Code Online (Sandbox Code Playgroud)
测试/ CMakeFiles.txt:
cmake_minimum_required(VERSION 2.0)
project(test)
add_subdirectory(../lib1 ${CMAKE_CURRENT_BINARY_DIR}/lib1)
add_subdirectory(../lib2 ${CMAKE_CURRENT_BINARY_DIR}/lib2)
add_executable(test main.cpp)
target_link_libraries(test lib1 lib2)
Run Code Online (Sandbox Code Playgroud)
即lib2依赖于lib1并test依赖于它们.(我知道技术上静态的库不会"链接",但这只是一个例子).
问题是,使用当前设置,lib1编译两次 - 第一次在"test"构建目录中,第二次在"test/build_directory/lib2/build_directory"中.我想避免这种情况.
我希望能够将lib1,lib2或它们两者(使用add_subdirectory)的依赖性添加到位于其他位置的任何项目.所以移动CMakeFiles不是一个选择.我也想避免多次编译任何库.
我怎样才能做到这一点?
cmake-2.8.4 winxp sp3
--EDIT--顶级cmakelists不是一个选项,因为我想保持干净的顶级目录,并能够将库包含在可以位于其他地方的其他项目中.因为它是windows,我无法"在系统范围内安装软件包" - 我不想失去动态切换编译器的能力.使用不同编译器构建的实用程序库将使用不同的C运行时库/ ABI,因此将不兼容.
情况
我正在开发使用Qt 4的32位应用程序,而我正在使用Windows 7 64位.
我的程序有主要的非OpenGL小部件,QGLWidget可以选择由用户打开.
问题:
当我创建它时QGLWidget,glGetVersion报告"1.1.0"(我的硬件支持OpenGL 4.3.0).因此,我需要的许多功能根本不起作用(很明显,因为它们在OpenGL 1中不可用).这个问题"有时"发生.
附加信息
如果我使用gDebugger启动程序,一切正常,glGetVersion返回"4.3.0",如预期的那样.添加此行:
QGLFormat::OpenGLVersionFlags flags = QGLFormat::openGLVersionFlags();
Run Code Online (Sandbox Code Playgroud)
在main()函数的开头也解决了这个问题.
该应用程序在WinXP 32位上运行良好.
我在2.3年前为这个应用程序编写了OpenGL子系统,使用它的人说他们在虚拟机(Win7或vista guest)上有类似的问题,但我不记得当时我是如何处理这个问题的.
OpenGL初始化
使用QGLWidget ,Qt 4执行OpenGL初始化,没有glew或额外的库.
程序中只有一个QGLWidget.确切地说,有一个派生自QGLWidget的类,它的初始化看起来像这样:
DisplayWidget::DisplayWidget(QWidget* parent)
: QGLWidget(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer), parent)
Run Code Online (Sandbox Code Playgroud)
系统配置:
操作系统:Windows 7 64位.
编译器:MSVC2008表示SP1.
Qt:Qt 4.8.1(使用MSVC2008从支持OpenSSL的源代码编译).Windows SDK:Windows Server 2008和.NET 3.5.GPU:GeForce 460 GTX
问题:
什么可能导致这个问题?
--update--
"魔法修复"(OpenGLVersionFlags)在完全重建后停止工作,现在应用程序不断初始化软件渲染器,即使使用gDebugger启动也是如此.
我机器上的所有其他OpenGL应用程序都可以正常工作并可以使用着色器.
我用最新的驱动程序.
有任何想法吗?
--update--
经过一些测试后,我发现谷歌chrome和steam客户端会影响所有使用OpenGL的Qt应用程序.
如果我打开谷歌Chrome和Steam,最终所有程序都将无法正常工作,将无法再获得硬件加速的OpenGL.
如果我关闭谷歌浏览器并保持蒸汽打开,每次第二次尝试启动硬件加速程序都将失败.
如果我关闭蒸汽和铬合金,那么每个程序启动都会成功.
为什么会发生这种情况?
--update--
我已经阅读了调试器输出,发现了一个非常有趣的事情:
'vdclient.exe': Loaded 'C:\Windows\SysWOW64\nvoglv32.dll'
First-chance exception at 0x777f47a5 (ntdll.dll) in vdclient.exe: 0xC0000005: Access …Run Code Online (Sandbox Code Playgroud) 在常见的lisp中,我可以使用插槽名称/符号来访问结构槽?
我想要的是
(defstruct point (x 0) (y 0))
(defmacro -> (struct slot) `(slot-value ,struct ,slot))
(setf p (make-point))
(setf (slot-value p 'x) 1)
(setf (-> p 'y) 2)
Run Code Online (Sandbox Code Playgroud)
我正在使用clozure cl,并且在clozure cl中这是有效的.但是,AFAIK这是非标准行为(相当于"未定义行为"C++).我不打算切换到另一个CL实现,所以我应该继续使用 slot-value结构,还是有更好的方法来实现它?
在这个代码片段中,实际调用了哪个构造函数?
Vector v = getVector();
Run Code Online (Sandbox Code Playgroud)
Vector有复制构造函数,默认构造函数和赋值运算符:
class Vector {
public:
...
Vector();
Vector(const Vector& other);
Vector& operator=(const Vector& other);
};
Run Code Online (Sandbox Code Playgroud)
getVector按值返回.
Vector getVector();
Run Code Online (Sandbox Code Playgroud)
代码使用C++ 03标准.
代码片段看起来应该调用默认构造函数然后调用赋值运算符,但我怀疑这个声明是使用复制构造函数的另一种形式.哪个是对的?
我正在尝试使用OpenGL,Eigen3和"Jacobian pseudoinverse"方法实现简单的逆运动学测试.
使用"雅可比转置"算法系统工作正常,但是,当我尝试使用"伪逆"时,关节变得不稳定并开始抖动(最终它们完全冻结 - 除非我使用"雅可比转置"回退计算).我已经调查了这个问题,结果证明在某些情况下Jacobian.inverse()*雅可比行列式具有零行列式并且不能被反转.但是,我在互联网上看过其他演示(Youtube)声称使用相同的方法,他们似乎没有这个问题.所以我不确定问题的原因在哪里.代码如下:
*.H:
struct Ik{
float targetAngle;
float ikLength;
VectorXf angles;
Vector3f root, target;
Vector3f jointPos(int ikIndex);
size_t size() const;
Vector3f getEndPos(int index, const VectorXf& vec);
void resize(size_t size);
void update(float t);
void render();
Ik(): targetAngle(0), ikLength(10){
}
};
Run Code Online (Sandbox Code Playgroud)
*的.cpp:
size_t Ik::size() const{
return angles.rows();
}
Vector3f Ik::getEndPos(int index, const VectorXf& vec){
Vector3f pos(0, 0, 0);
while(true){
Eigen::Affine3f t;
float radAngle = pi*vec[index]/180.0f;
t = Eigen::AngleAxisf(radAngle, Vector3f(-1, 0, 0))
* Eigen::Translation3f(Vector3f(0, 0, ikLength));
pos = …Run Code Online (Sandbox Code Playgroud) 我想知道如何禁用在pycharm中打开“在任何地方搜索”窗口的“双移”热键,或者至少将其重新映射为健全的东西。
它妨碍了我,并打乱了与编辑器一起工作的任何尝试。
互联网上任何地方都没有关于该主题的信息。
我正在Windows 7 64bit上使用PyCharm社区版2016.1.3。
你好,祝你好运.
以下代码片段编译cl.exe(15.00.30729.01)和mingw-g ++(4.4.0):
template<typename T> class Test{
public:
T t;
void error(){
int doesNotExist = 6;
return doesNotExist;//<---- void function returning result
}
};
int main(int argc, char** argv){
Test<int> test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此外,在cl.exe上你甚至可以逃避这样的事情:
template<typename T> class Test{
public:
T t;
void error(){
doesNotExist = 6;//<---- undeclared variable
return doesNotExist;//<---- void function returning result
}
};
Run Code Online (Sandbox Code Playgroud)
现在,这显然是因为编译器在有人调用它们之前不会为模板类的方法创建内容.但是,当您设计大型模板类时,这可能会出现问题(因为您很可能忘记在某处添加测试调用到新方法).
问题:
是否有g ++或cl.exe的编译器开关会强制编译器处理整个模板(因此这段代码片段会触发编译错误)?
情况:
typedef int TypeA;
typedef int TypeB;
Run Code Online (Sandbox Code Playgroud)
我需要使TypeA与TypeB不兼容(因此任何将TypeA分配给TypeB的尝试都会触发编译错误),同时保留内置类型(运算符)提供的所有功能.
一种方法是将每种类型包装到单独的结构/类中(并重新定义所有运算符等).
有没有其他更"优雅"的方式呢?
不允许使用第三方库.不支持C++ 0x/C++ 11x.(支持C++ 2003)