小编Ric*_*ers的帖子

仅使用css翻转/反转/镜像文本

我做了一些谷歌搜索,这是我的答案

<!--[if IE]>
<style>
    .mirror {
        filter: progid:DXImageTransform.Microsoft.BasicImage(mirror=1);
    }
</style>
<![endif]--> 
<style>
.mirror {
    display:block; 
    -moz-transform: matrix(-1, 0, 0, 1, 0, 0);
    -webkit-transform: matrix(-1, 0, 0, 1, 0, 0);
    -o-transform:matrix(-1, 0, 0, 1, 0, 0);
}
</style>
<div class="mirror">testing</div>
Run Code Online (Sandbox Code Playgroud)

这里唯一的问题是镜像的中心不是对象的中心,所以我们可能需要一些javascript来将对象移动到我们想要的位置.

html css webkit mirroring

55
推荐指数
2
解决办法
7万
查看次数

发布者 - 订阅者与观察者

我试图将Observer设计模式理解为主要事件调度设计模式.观察者模式似乎是发布 - 订阅设计模式的类型或类型,我想知道为什么有两个相似的外观设计模式以及我应该如何在两者之间进行选择.

在这两种情况下,信息消息都在实体之间发送,在这两种情况下,实体必须以某种方式注册或订阅才能接收消息.

两种设计模式之间的主要区别似乎是:

  • 观察者模式似乎具有较低的消息量.观察员向他们观察的实体注册,以获得某一事件的通知.发布 - 订阅模式似乎涉及单向对话,一种从一个实体到另一个实体的独白,具有更多不同类型的消息.
  • 在Observer模式中,Observers期望一种特定类型的事件通知,其中Publish-Subscribe似乎具有更开放的消息协议,具有更广泛的可能消息类型和消息内容(由特定类型的事件触发的消息之间的差异)指示事件发生与更一般的消息协议相对应,消息包含可能不是事件触发器的信息,例如包含由周期性定时器触发的温度数据的消息.
  • Observer在应用程序的边界内或在单个进程内实现.Publish-Subscribe是一种跨应用程序通信模式,消息在不同进程之间交换.
  • 架构的不同之处在于,当Observer使用组合的发布者/代理和订阅者(​​观察者)实体时,Publish-Subscribe具有单独的发布者,代理和订阅者实体.

我想到的一个想法是,在多线程应用程序中,可以在多个线程之间进行通信而不是Observer模式时使用Publish-Subscribe模式.也许Obse​​rver模式可以在进程之间使用,例如进程注册与另一个进程注册,以便在事件发生时得到通知.一个示例是农场管理仪表板应用程序,其注册多个动物饲料箱,如果由箱测量的饲料水平或重量下降到某个阈值以下则通知.

这两种设计模式之间是否存在其他重要差异,这些设计模式可以为选择一种模式提供标准?

design-patterns publish-subscribe event-dispatching observer-pattern

44
推荐指数
0
解决办法
1万
查看次数

C++字符串文字的规则转义字符

\字符串文字中的转义字符有哪些规则?是否有所有转义字符的列表?

特别是,当我\在gedit中的字符串文字中使用并按任意三个数字跟随它时,它会以不同的方式对它们进行着色.

我试图std::string用文字创建一个构造,其中0后跟空字符(\0)后跟字符0.然而,语法突出显示警告我,这可能会创建类似于0后跟空字符(\00,aka \0)的字符,也就是说,只有两个字符.

对于这个问题的解决方案,这是最好的方法:

std::string ("0\0" "0", 3)  // String concatenation 
Run Code Online (Sandbox Code Playgroud)

并且是否存在一些关于转义字符在字符串文字中的作用的参考?例如,'\ a'是什么?

c++ string escaping

40
推荐指数
1
解决办法
10万
查看次数

主机名的IPv6地址

Linux中是否有任何命令可以获取主机名的IPv6地址?

我试过了NSLookup,但似乎没有选择获取指定主机名的IPv6地址,或者我错过了它.

我有一个处理IPv6的C程序,我想通过使用不同的方法来获取主机的IPv6地址来检查我是否得到了正确的结果.

sockets linux networking ipv6

35
推荐指数
2
解决办法
7万
查看次数

fgetpos/fsetpos和ftell/fseek有什么区别

What's the difference between using the functions fgetpos() and fsetpos() and using the functions ftell() and fseek() to get and set a position in a file?

What are fgetpos() and fsetpos() good for? Why would they be used instead of ftell() and fseek()?

c c-standard-library

29
推荐指数
3
解决办法
1万
查看次数

std :: atomic | compare_exchange_weak与compare_exchange_strong

我不确定我是不理解还是文件没有明确制定.

以下摘录摘自最新草案(N3126,第29.6节):

bool atomic_compare_exchange_weak(volatile A* object, C * expected, C desired);
bool atomic_compare_exchange_weak(A* object, C * expected, C desired);
bool atomic_compare_exchange_strong(volatile A* object, C * expected, C desired);
bool atomic_compare_exchange_strong(A* object, C * expected, C desired);
bool atomic_compare_exchange_weak_explicit(volatile A* object, C * expected, C desired, memory_order success, memory_order failure);
bool atomic_compare_exchange_weak_explicit(A* object, C * expected, C desired, memory_order success, memory_order failure);
bool atomic_compare_exchange_strong_explicit(volatile A* object, C * expected, C desired, memory_order success, memory_order failure);
bool atomic_compare_exchange_strong_explicit(A* object, C * expected, …
Run Code Online (Sandbox Code Playgroud)

c++ stl atomic c++-standard-library c++11

28
推荐指数
2
解决办法
2万
查看次数

do-while-false循环是常见的吗?

前一阵子我改变了我处理c风格错误的方式.

我发现很多代码看起来像这样:

int errorCode = 0;

errorCode = doSomething();
if (errorCode == 0)
{
   errorCode = doSomethingElse();
}

...

if (errorCode == 0)
{
   errorCode = doSomethingElseNew();
}
Run Code Online (Sandbox Code Playgroud)

但最近我一直这样写:

int errorCode = 0;

do
{       
   if (doSomething() != 0) break;
   if (doSomethingElse() != 0) break;
   ...
   if (doSomethingElseNew() != 0) break;
 } while(false);
Run Code Online (Sandbox Code Playgroud)

我已经看到很多代码在出现错误后没有执行任何内容,但它始终以第一种方式编写.有没有其他人使用这种风格,如果你不这样做,为什么?

编辑:只是为了澄清,通常这个构造使用errno否则我会int在打破之前将值赋值给.此外,通常还有更多代码,而不仅仅是if (error == 0 )子句中的单个函数调用.但是,要考虑很多好点.

c c++ coding-style

25
推荐指数
5
解决办法
7546
查看次数

在循环中擦除unordered_map中的元素

StackOverflow上有几个答案表明以下循环是一种很好的方法来擦除std::unordered_map满足某些谓词的元素pred:

std::unordered_map<...> m;
auto it = m.begin();
while (it != m.end())
{
    if (pred(*it))
        it = m.erase(it);
    else
        ++it;
}
Run Code Online (Sandbox Code Playgroud)

我对C++ 11(而不是C++ 14)特别感兴趣,而cppreference.com上的以下不祥之处表明上述循环依赖于未定义的行为,并且可能在C++ 11中无效:

保留未擦除元素的顺序(这使得可以在迭代容器时擦除单个元素)(从C++ 14开始)

另请参见标题2356.无序关联容器中擦除的稳定性,其中包含对第754页的工作草案N3797第14项的请求的措辞更改(附加短语开头",并保留相对顺序......").

这个措辞与N3797有关.

按照指示修改[unord.req],p14:

-14- insert和emplace成员不应影响对容器元素的引用的有效性,但可能使容器的所有迭代器无效.擦除成员应仅使迭代器和对已擦除元素的引用无效,并保留未擦除元素的相对顺序.

如果我对cppreference.com的注释的解释是正确的,并且上面的循环依赖于C++ 11中的未定义行为,那么在C++ 11中解决这个问题的最有效方法是什么?

c++ unordered-map c++11

21
推荐指数
3
解决办法
4862
查看次数

R代表RAX,RBX,RCX,RDX,RSI,RDI,RBP,RSP?

x86汇编语言不得不改变,因为x86处理器架构已经从8位变为16位变为32位,现在变为64位.

我知道在32位汇编程序寄存器名称(EAX,EBX等)中,每个名称的E前缀代表扩展意味着32位形式的寄存器而不是16位形式(AX,BX等).

这些寄存器名称的R前缀在64位中代表什么?

x86 assembly x86-64 cpu-architecture cpu-registers

20
推荐指数
2
解决办法
2万
查看次数

为什么必须由派生类最多的类构造虚拟基类?

以下代码将无法编译:

class A {
public:
    A(int) {}
};

class B: virtual public A {
public:
    B(): A(0) {}
};

// most derived class
class C: public B {
public:
    C() {} // wrong!!!
};
Run Code Online (Sandbox Code Playgroud)

如果我AC构造函数初始化列表中调用构造函数,那就是:

// most derived class
class C: public B {
public:
    C(): A(0) {} // OK!!!
};
Run Code Online (Sandbox Code Playgroud)

它确实有效.

显然,原因是因为虚拟基类必须始终由最派生的类构造.

我不明白这个限制背后的原因.

c++ inheritance virtual-inheritance

19
推荐指数
3
解决办法
2329
查看次数