阅读文档后,我仍然对使用它感到困惑par_unseq
.我知道由于线程和矢量化,我无法说出执行的顺序,但是我仍然可以依赖输出的顺序吗?
transform([x0, x1, x2], f) == [f(x0), f(x1), f(x2)]]
Run Code Online (Sandbox Code Playgroud)
换句话说,这个测试是否会失败?
std::vector<int> xs = {1, 2, 3, 4};
std::vector<int> ys(xs.size());
std::transform(
std::execution::par_unseq,
cbegin(xs), cend(xs),
begin(ys),
[](int x) { return x*x; });
std::vector<int> expected = {1, 4, 9, 16};
ASSERT_EQ(expected , ys);
Run Code Online (Sandbox Code Playgroud) 根据Herb Sutter的这篇文章,我们应该总是选择Class Specializing over Function Overload,而不是专门的功能模板.
原因是
我必须承认,在我阅读这篇文章之前,我曾几次撞到墙上.他为什么不选择我的专业功能...
阅读完文章之后我再也没有使用过专业功能模板.
例:
template <class T> void foo( T t);
Run Code Online (Sandbox Code Playgroud)
我们应该像这样编写foo,这样我们就可以使用类模板而不是函数专用来专门化它.
template<class T>
struct FooImpl;
template <class T> void foo( T t) {
FooImpl<T>::foo(t);
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以对模板进行特殊处理,而不必担心过载规则,我们甚至可以将模板专门化为这样的模板:
template<class U, class V>
struct FooImpl< QMap< U, V > >;
Run Code Online (Sandbox Code Playgroud)
StackOverflow成员似乎更喜欢专业功能模板?
为什么?因为专业功能模板比过载解决方案和类专业化获得了更多的赞成.
凭借我目前所获得的信息,我发现它有悖常理,因为我知道我能说得对,但我知道跟在我身后的人会碰壁.
已经有一些GOTWCA文章的链接,所以你必须阅读这篇文章.这意味着upvoters必须有一些额外的信息,请站起来赐教.
我总是尝试应用SOLID原则,我真的很喜欢Qt工具包,但我发现自己一直都在使用单继承规则.
如果使用多重继承,则moc假定第一个继承的类是QObject的子类. 另外,请确保只有第一个继承的类是QObject.
如何组合QObject规则和接口隔离原则的单一继承.
我想用信号和插槽定义接口,但我不允许这样做.
你如何解决这个缺点?
qt interface solid-principles interface-segregation-principle
boost::bind
处理boost::shared_ptr
与原始指针相同的方式.
QObject * object(new QObject);
boost::shared_ptr<QObject> sharedObject(new QObject);
bind(&QObject::setObjectName, object, _1)( "name" );
bind(&QObject::setObjectName, sharedObject, _1)( "name" );
Run Code Online (Sandbox Code Playgroud)
我希望有一个boost::bind
处理QPointers
作为原始指针指针.
QPointer<QObject> guardedObject(new QObject);
// i want to write it like this
bind(&QObject::setObjectName, guardedObject, _1)( "name" );
//now i have to do it like this
bind(&QObject::setObjectName, bind(&QPointer<QObject>::data, guardedObject), _1)( "name" );
Run Code Online (Sandbox Code Playgroud)
是否有人为此专业化QPointer
?
如果不是,你知道从哪里开始或需要专门做什么,所以我可以自己做.
c++ ×3
qt ×2
algorithm ×1
boost-bind ×1
c++17 ×1
interface ×1
interface-segregation-principle ×1
qpointer ×1
templates ×1