我正在尝试强制cmake用g ++构建我的cpp代码,因为默认它使用clang代替.所以我使用:cmake -D CMAKE_CXX_COMPILER=g++ ../src/CMakeLists.txt之后cmake检查gcc和g ++(成功),但仍然make VERBOSE=1产生
/usr/bin/c++ -o CMakeFiles/trial_cpp.dir/trial.cpp.o -c "/Users/Kuba/Code/Sketchpad/Trial project/src/trial.cpp"
Linking CXX executable trial_cpp
/opt/etlocal/bin/cmake -E cmake_link_script CMakeFiles/trial_cpp.dir/link.txt --verbose=1
/usr/bin/c++ -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/trial_cpp.dir/trial.cpp.o -o trial_cpp
Run Code Online (Sandbox Code Playgroud)
因为它调用/ usr/bin/c ++而不是/ usr/bin/g ++我同意它仍然使用clang.知道问题是什么?我知道我有g ++,它在/ usr/bin /中.我正在运行Mac OS X 10.8.2
我正在寻找一种方法从一个numpy数组中一次选择多个切片.假设我们有一维数据阵列,并想要提取它的三个部分,如下所示:
data_extractions = []
for start_index in range(0, 3):
data_extractions.append(data[start_index: start_index + 5])
Run Code Online (Sandbox Code Playgroud)
之后data_extractions将是:
data_extractions = [
data[0:5],
data[1:6],
data[2:7]
]
Run Code Online (Sandbox Code Playgroud)
没有for循环有没有办法执行上述操作?numpy中的某种索引方案可以让我从数组中选择多个切片并将它们作为多个数组返回,比如在n + 1维数组中?
我想也许我可以复制我的数据,然后从每一行中选择一个范围,但下面的代码会抛出一个IndexError
replicated_data = np.vstack([data] * 3)
data_extractions = replicated_data[[range(3)], [slice(0, 5), slice(1, 6), slice(2, 7)]
Run Code Online (Sandbox Code Playgroud) 我在使用单元测试开发应用程序的高尚道路上迈出了第一步,但事实证明它是一个陡峭而粗糙的应用程序.我正在Qt中开发一个应用程序,所以想到达到他们的QTestLib框架.现在,我理解如何进行单元测试,但我似乎无法弄清楚如何将单元测试纳入项目.假设我有一个控制台应用程序,它只有一个main.cpp和一个cpp和h文件,用于我想要开发的类,比如MyClass.我想正确的做法是用h和cpp文件创建一个相应的测试类MyClassTest.但是我应该把它放到同一个项目中吗?或者更确切地说,为单元测试创建一个单独的项目,可以访问"main"项目中的文件(不知道我该怎么做)呢?
如果主应用程序和测试都在同一个项目中,如何在不运行应用程序的情况下运行测试或反之?我尝试将Qt教程1中的单元测试文件合并到一个控制台项目中,但问题在于它们使用的宏QTEST_MAIN(TestQString)扩展为一个main(...)函数.这会导致与main(...)main.cpp中的冲突.好吧,我可以重命名任何一个,但问题仍然存在 - 我如何运行测试或应用程序本身?如果我覆盖QTEST_MAIN宏(无论如何这是一个坏主意)我禁用测试.如果我main(...)在main.cpp中重命名函数,那么实际的应用程序永远不会被执行.我想应该有一种方法可以为项目制作两个单独的可执行文件,一个运行单元测试,另一个启动应用程序,但无法弄清楚如何去做.
我正在采取单元测试的第一步,并且有封装问题.我的类有一些不应该对客户端可见的私有成员变量,但为了让我将对象置于我想要测试它的状态,我需要设置这些私有变量.
说我有这样的代码:
Class Foo {
public:
int action() ;
private:
int state ;
} ;
int Foo::action()
{
if(this->state == 1)
return 1 ;
else
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
所以现在我想测试Foo::action(),但我需要能够设置Foo::state能够在不同场景下检查功能.一个解决方案是define private public测试代码中的邪恶" ".但是有更优雅的东西吗?我想强调的是,这Foo::state是一个客户端不应该访问的变量,因此我不想声明任何公共setter.
编辑:
我现在认为扩展我想在测试代码中测试的类并在该派生类中包含setter会起作用,只要我将私有变量更改为protected.但这是一个"仅限一代"的解决方案,仍然感觉像是一个黑客而不是一个正确的方法.
编辑2:
在阅读了答案和评论之后我得到了(特别感谢Lieven和ap.)我相信我现在要测试的实际课程(不是我提供的简单例子)只是做得太多而我的问题的答案正在移动它的一些逻辑进入另一个将由大家伙使用的类.
我想用gtest测试模板类.我在Google测试手册中阅读了有关TYPED_TESTs的内容,并查看了他们引用的官方示例,但仍无法解决在我的测试中实例化模板类的对象.
假设以下简单模板类:
template <typename T>
class Foo
{
public:
T data ;
};
Run Code Online (Sandbox Code Playgroud)
在测试类我们声明
typedef ::testing::Types<int, float> MyTypes ;
Run Code Online (Sandbox Code Playgroud)
现在,如何在测试中为MyTypes中列出的Ts实例化类Foo的对象?例如
TYPED_TEST(TestFoo, test1)
{
Foo<T> object ;
object.data = 1.0 ;
ASSERT_FLOAT_EQ(object.data, 1.0) ;
}
Run Code Online (Sandbox Code Playgroud) 是否有可能将变量本身的精度变为将在运行时定义的变量?说,如果我尝试编译:
SUBROUTINE FOO( VARIABLE, PRECISION_VALUE )
IMPLICIT NONE
INTEGER(4) :: PRECISION_VALUE
INTEGER(PRECISION_VALUE) :: VARIABLE
RETURN
END
Run Code Online (Sandbox Code Playgroud)
编译器输出是:
error #6683: A kind type parameter must be a compile-time constant. [PRECISION_VALUE]
INTEGER(PRECISION_VALUE) :: VARIABLE
--------------^
compilation aborted for trial.f (code 1)
Run Code Online (Sandbox Code Playgroud)
不管怎么说呢?我知道不能使用任何任意值KIND,但这不是我在这个问题上的关注点.
在OSX 10.9中-stdlib,clang ++ 的默认选项是libc++,这就是Macport在构建包时所使用的选项.有没有办法告诉Macports使用libstdc++?
特别是我想通过Macports构建OpenCV,所以它正在使用libstdc++,但我想我也需要为其他软件包做这样的事情.
我有一个大的3D场景,所有对象都存储在OpenGL顶点数组中,每个帧都绘制为:
for(int i = 0 ; i < noLists ; ++i)
{
glVertexPointer(3, GL_FLOAT, 0, vertexArraysList[i] ) ;
glColorPointer(4, GL_FLOAT, 0, colorArraysList[i] ) ;
glDrawArrays(GL_QUAD_STRIP, 0, verticesNumber) ;
}
Run Code Online (Sandbox Code Playgroud)
通常,用户首先开始查看整个场景,但很快就会识别感兴趣的部分并放大给定区域,以便整个场景的大部分落在屏幕之外.但是我发现缩放时的FPS速率与观看整个屏幕时的FPS速率相同,所以OpenGL似乎绘制了所有那些落在屏幕之外的顶点(或者至少在管道中与它们一起进展得足够远,因为它们与绘图没有区别他们在时间成本方面).
有没有办法测试特定顶点数组的内容是否落在屏幕之外,所以我可以避免绘制它?
Fortran中的构建模块需要按特定顺序完成,例如,如果文件A.f需要定义模块B.f,则B.f需要先编译.我怎样才能在Scons中施加这样的构建顺序?如果我提供源文件列表,它会按字母顺序排列(A.f以前编译B.f).我阅读了关于Requires()和Depends()功能,但无法让他们为我工作.
我很乐意只列出源文件,以便我需要编译它们(因此禁止按字母顺序重新排列它们),但任何其他方法也会受到欢迎.
按照Kyle的要求,这是我的Sconscript和构建日志:
# Main program building script
Import('env')
PROGRAM = 'main.exe'
SRC_PREFIX = './src/'
SRC = [ 'array_1D_module.f',
'array_2D_module.f',
'array_3D_module.f',
'thomas_algorithm_module.f',
'histogram_module.f',
'histogram_computer_module.f',
'density_parameters_module.f',
'diffusion3D_aos_z_sub_solver_module.f',
'diffusion3D_aos_y_sub_solver_module.f',
'diffusion3D_aos_x_sub_solver_module.f',
'diffusion3D_aos_solver_module.f',
'nonlinear_diffusion_utilities_module.f',
'nonlinear_diffusion_parameters_module.f',
'derivative_magnitude_computer_module.f',
'nonlinear_diffusion_module.f',
'main_module.f',
'main.f' ]
# Attach prefix to each source file
for i in range( len(SRC) ) :
SRC[i] = SRC_PREFIX + SRC[i]
env.Program(target = PROGRAM, source = SRC)
Run Code Online (Sandbox Code Playgroud)
这产生了:
scons: Reading …Run Code Online (Sandbox Code Playgroud) 我正面临为一个研究项目编写一个相当大的项目,该项目可能仅由我使用,或者也可能由少数可能在将来接受它的人使用.关键是 - 它不是商业应用程序,也不会公开.而我的问题 - 在这种情况下,真正有任何好的论据背后定义我的所有类私有而不是公开?整个代码意味着作业序列调度程序.所以,例如,我有一个基本的工作类,如下所示:
class Job {
private: // should it be?
int Jobid;
int stack_row ; // horizontal positon in a stack
int row_height ; // position in a column of containers
float ArrivalTime;
float FinishTime;
float GantryTime;
float WaitingTime; // Job Start - Job Arrival
float ReachableTime; // later time of Vehicle or YC arrival to job location
float DueDate;
float Tardiness; // max{0, Ci-di} Ci, Completion time = Finish time; di, DueDate
float SlackTime;
int type; …Run Code Online (Sandbox Code Playgroud)