我想要一个存储库来完全忽略某些某些文件 - 相当于在git系统中将这些文件添加到.gitignore.我试过了:
svn propset svn:ignore *.aux" .
Run Code Online (Sandbox Code Playgroud)
忽略所有.aux文件.但是,在这样做并成功之后svn commit,svn status仍然显示:
? something.aux
! somethingelse.aux
Run Code Online (Sandbox Code Playgroud)
是否有更强大的方法告诉它忽略这些文件,以便它们不会出现在这样的列表中?
我试图__attribute__让一个函数基本上使用与其余代码不同的标志进行编译.例如:
#include <iostream>
#include <vector>
void MyNormalFunction();
void MyDebugabbleFunction() __attribute__((optimize(0)));
void MyNormalFunction()
{
std::cout << "Test" << std::endl;
std::vector<int> a;
for(unsigned int i = 0; i < 10; ++i)
{
a.push_back(i);
}
}
void MyDebugabbleFunction()
{
std::cout << "Test" << std::endl;
std::vector<int> a;
for(unsigned int i = 0; i < 10; ++i)
{
a.push_back(i);
}
}
int main()
{
MyNormalFunction();
MyDebugabbleFunction();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用-g -O2进行构建,但我希望能够进行合理的调试MyDebugabbleFunction()- 所以我使用了__attribute__((optimize(0)))它的声明.但是,当使用调试器单步执行这两个函数时,我无法区分任何差异.我希望在尝试逐步优化代码时通常会看到"看似不稳定"的行为MyNormalFunction,但标准的"-g" - 仅调试器行为MyDebuggableFunction.
是我做错了 …
如果我做:
set(SourceDir ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE)
message("SourceDir: " ${SourceDir})
Run Code Online (Sandbox Code Playgroud)
该消息表示 SourceDir 为空。据推测,它仅在父作用域中设置。有没有办法在当前作用域和父作用域中设置变量?这样我就不必做:
set(SourceDir ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE)
set(SourceDir ${CMAKE_CURRENT_SOURCE_DIR})
message("SourceDir: " ${SourceDir})
Run Code Online (Sandbox Code Playgroud) 通常,适配器的目的是以修改的格式进行函数调用.有没有办法为成员变量做同样的事情?也就是说,我有一个包含a的对象SomePoint和另一个包含a的对象DifferentPoint.SomePoint其存储的数据作为成员变量资本X和Y地方AnotherPoint将其存储的数据作为成员变量小写x和x.所以问题是你不能编写一个接受a SomePoint或a 的函数,DifferentPoint因为你无法访问.x或者.X(甚至使用模板而没有完全专门针对每个不同的点类型,在这种情况下你可能只是在点上重载类型).
现在的问题是有没有一种方法,使这将产生一个适配器.X的SomePoint时候.x请求?这两种点类型都是库类,所以我不能直接编辑任何一个的内部.我还想避免复制数据.
我很确定答案是"你不能使用模板,你必须使用虚函数(动态多态)",但似乎我必须复制很多代码,如果我去那条路线.这是设置:
我目前有两个类,ColorImageSegmentation和GrayscaleImageSegmentation.它们基本上是相同的,但有三个不同 - 它们在不同的类型(ColorImage和GrayscaleImage)上运行 - 一个参数,直方图的维度(3对1)是不同的 - PixelDifference函数根据图像类型而不同
如果我创建一个类
template <TImageType>
class ImageSegmentation
{
};
Run Code Online (Sandbox Code Playgroud)
我会很好的.但是,我希望将此对象作为另一个类的成员:
class MyMainClass
{
ImageSegmentation MyImageSegmentation;
};
Run Code Online (Sandbox Code Playgroud)
但是用户需要确定类型MyImageSegmentation(如果用户打开灰度图像,我想实例化MyImageSegmentation<GrayScaleType>.同样对于彩色图像,MyImageSegmentation<ColorType>.)
使用派生类,我可以存储指针,然后执行:
class MyMainClass
{
ImageSegmentation* MyImageSegmentation;
};
... user does something...
MyImageSegmentation = new ColorImageSegmentation;
Run Code Online (Sandbox Code Playgroud)
但是我怎么用模板做这样的事呢?问题是我有很多:
typedef TImageType::HistogramType HistogramType;
typedef TImageType::PixelType PixelType;
Run Code Online (Sandbox Code Playgroud)
发生了一些事情,所以我不知道如何将它们转换为动态多态模型而不重复一大堆代码.
对不起,漫无目的...有人对我有什么建议吗?
谢谢,
大卫
如文档中所述,以下预期输出为:
boost::filesystem::path filePath1 = "/home/user/";
cout << filePath1.parent_path() << endl; // outputs "/home/user"
boost::filesystem::path filePath2 = "/home/user";
cout << filePath2.parent_path() << endl; // outputs "/home"
Run Code Online (Sandbox Code Playgroud)
问题是,你如何处理这个问题?也就是说,如果我接受一个路径作为参数,我不希望用户关心它是否应该有一个尾部斜杠.看起来最简单的事情就是附加一个尾部斜杠,然后调用parent_path()TWICE来获取我想要的"/ home"的父路径:
boost::filesystem::path filePath1 = "/home/user/";
filePath1 /= "/";
cout << filePath1.parent_path().parent_path() << endl; // outputs "/home"
boost::filesystem::path filePath2 = "/home/user";
filePath2 /= "/";
cout << filePath2.parent_path().parent_path() << endl; // outputs "/home"
Run Code Online (Sandbox Code Playgroud)
但这看起来很荒谬.在框架内有更好的方法来处理这个问题吗?
假设我有一个项目,如下所示:
Project (dir)
-- CMakeLists.txt
-- MyLib (dir)
|-- CMakeLists.txt
|-- MyLib.h
|-- MyLib.cpp
-- MyOtherLib (dir)
|-- CMakeLists.txt
|-- MyLib.h (note that this is exactly the same name as in MyLib above)
|-- MyLib.cpp
Run Code Online (Sandbox Code Playgroud)
如果在 MyLib/CMakeLists.txt 中我这样做:
target_include_directories(MyLib PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
Run Code Online (Sandbox Code Playgroud)
那么任何事情target_link_libraries都会MyLib有“正确的”包含路径去做#include "MyLib.h"。但是,如果另一个可执行文件MyExecutable依赖于这两个库,target_link_libraries(MyExecutable MyLib MyOtherLib)您希望能够使用#include "MyLib/MyLib.h"或来指定哪个库#include "MyOtherLib/MyLib.h"。我认为做到这一点的唯一方法是使用:
target_include_directories(MyLib PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
Run Code Online (Sandbox Code Playgroud)
这破坏了它的一个好处,target_include_directories因为它确实强烈地强制避免意外的标头依赖性,因为您实际上不能包含您未明确声明使用的东西。
还有其他方法可以实现这种#include "MyLib/MyLib.h"行为吗?
我正在尝试更改QRubberBand的颜色.我试过这个:
QRubberBand* rubberBand = new QRubberBand(QRubberBand::Rectangle, this->graphicsView);
QPalette palette;
palette.setBrush(QPalette::Foreground, QBrush(Qt::green));
palette.setBrush(QPalette::Base, QBrush(Qt::red));
rubberBand->setPalette(palette);
rubberBand->resize(30, 30);
rubberBand->show();
Run Code Online (Sandbox Code Playgroud)
但出现的橡皮带是标准的黑色点缀.关于如何做到这一点的任何想法?
我正在使用带有c ++ 11标志的g ++ 4.7.在这个演示中:
#include <iostream>
#include <thread>
class do_work
{
public:
void operator()()
{
std::cout << "Doing work..." << std::endl;
}
};
void foo()
{
}
int main()
{
// Does not work
std::thread t(do_work);
t.join(); // error: request for member ‘join’ in ‘t’, which is of non-class type ‘std::thread(do_work)’
// Works
std::thread t2(foo);
t2.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我可以在一个用函数作为构造函数参数创建的线程上成功调用join(),但我不能在用functor作为构造函数参数创建的线程上调用join()(请参阅错误内联).有谁能解释一下?
我有一个AsyncTaskLoader<List<String>>成员变量List<String>mAddresses.在loadInBackground,如果我创建一个新对象,填充它,并返回它; onLoadFinished按预期调用,所以我可以更新适配器,然后更新视图.
public List<String> loadInBackground()
{
// ListView updates properly only if I do this (strange?)
mAddresses = new ArrayList<String>();
// ... fill mAddresses ...
return mAddresses;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用相同的变量,即使它的值发生变化也会onLoadFinished被调用:
public List<String> loadInBackground()
{
// ListView does not update with this!
if(mAddresses == null)
{
mAddresses = new ArrayList<String>();
}
// ... fill mAddresses ...
return mAddresses;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以评论这个吗?我是否应该像这样创建一个新对象来返回?是否有任何标志我可以设置"对象已更改,所以即使它是同一个对象,请确保执行所有更新?
android asynctaskloader android-loadermanager android-loader