小编MFH*_*MFH的帖子

前向迭代器是输出迭代器吗?

ForwardIterators是否必须是OutputIterators?我现在的STL的实现(VS2012)派生forward_iterator_tag从两个input_iterator_tagoutput_iterator_tag,但我找不到标准[N3485]这个要求.

c++ iterator-traits

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

规范正向输出迭代器的规范方法

如何以规范的方式在C++ 11中定义forward-output-iterators?

根据标准,forward_iterator只是一个input_iterator.所以相应的forward_iterator_tag只是延伸input_iterator_tag.如果我们std::iterator用来定义迭代器,我们使用什么标签作为正向输出迭代器?

定义扩展两者的私有标记是否规范forward_iterator_tag,output_iterator_tag或者是否有更好的解决方案?

c++ iterator-traits c++11

7
推荐指数
1
解决办法
509
查看次数

将Lua嵌入到C++中

我想编写一个C++ - 可以在执行期间交互/调用Lua脚本的程序.该程序的一个关键概念是完全平台独立性,但我似乎无法找到实际提供某些东西的Lua-build.

到目前为止我发现的Lua-builds要么基于环境变量,要么基于特定的库.lib,.dll或者.so.来自lua.org的官方Lua-source 也不是我正在寻找的,因为它定义了一个主要功能......

是否有一个简单的 - 最好的情况是像sqlite-amalgamation - 用于C/C++的Lua-interpreter,它没有任何这些依赖项?

c++ lua cross-platform

6
推荐指数
2
解决办法
2836
查看次数

获取桌面/ shell窗口的句柄

在我的一个程序中,我需要测试用户当前是否正在关注桌面/ shell窗口.目前我正在使用user32.dll中的GetShellWindow()并将结果与​​GetForegroundWindow()进行比较.

这种方法有效,直到有人更改桌面壁纸,但是一旦壁纸被更改,GetShellWindow()的句柄就不再与GetForegroundWindow()中的句柄相匹配,我不明白为什么会这样.(操作系统: Windows 7 32位)

有没有更好的方法来检查桌面是否专注?如果用户更换壁纸,最好不会破坏?

编辑:我设计了一个解决方法:我正在测试句柄以生成类"SHELLDLL_DefView"的子句.如果有,则桌面处于焦点状态.虽然它在我的电脑上工作并不意味着它会一直工作......

.net c# windows pinvoke winapi

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

重用"&&"背后的基本原理 - 右值参考的标记?

我最近在C++ 11上做了一个演讲,主要关注rvalues和移动语义.在演示期间,问题出现了为什么标准委员会决定重用"&&" - 令牌而不是引入像"§"这样的新标记.

有没有人遇到重用&&的理由?

c++ rvalue-reference c++11

6
推荐指数
1
解决办法
201
查看次数

Objective-C稳定ABI

我主要是一个C++人.由于C++缺少官方ABI,我总是使用类似COM的方法来支持多个编译器的组件设计.

最近我遇到的问题是Objective-C是否会取代类似COM的方法.显然,对于Objective-C来说,替换它需要一个稳定的ABI,因此我想知道Objective-C是否存在稳定的ABI(在所有主要操作系统[OSX,GNU/Linux,Windows]上)以及如何容易它将使用Objective-C(++)作为由不同编译器创建的组件之间的"粘合剂".

编辑: 正如Nikolai Ruhe所指出的,对COM的简短描述可能会有所帮助.COM本质上是一个"二进制标准",它允许混合不同编译器(以及各种语言)的二进制文件.COM的工具是接口,它定义了方法(映射到C++的虚函数).组件实现至少一个接口并作为DLL分发.它们可以位于系统的任何位置(位置在注册表中指定),并且可以由任何COM客户端通过它们实现的接口的ID加载.

c++ objective-c objective-c++

6
推荐指数
1
解决办法
917
查看次数

间接递归,依赖静态变量

是由标准定义的以下间接递归的结果还是未定义的行为?

auto abc() -> int ;

auto xyz() -> int  {
    static int instance = 3 + abc();
    return instance;
}

auto abc() -> int {
    static int instance = 2 + xyz();
    return instance;
}

int main() {
    int tmp = xyz();//or abc();
}
Run Code Online (Sandbox Code Playgroud)

在VS2012中,tmp是5,但我不确定这是否由标准保证.

c++ recursion static-initialization c++11

6
推荐指数
1
解决办法
373
查看次数

便携式 C++ 组件设计

我过去一直使用 COM 和 .NET 程序集来开发基于组件的系统。现在我要处理一个跨平台的 C++ 项目,并且想要在组件中构建代码......

显然 COM 和 .NET 不是一个选项,因为 COM 在任何地方都不可用,但 Windows 和程序集会向 .NET 框架添加依赖项,而这些依赖项可能在目标系统上不可用。

我知道由于 ABI 差异,我将无法在不重新编译的情况下在不同操作系统之间移动组件,但我想以某种方式编写代码,使其在源代码级别兼容。

是否有任何系统/框架可以在 C++ 中实现这样的架构?

c++ components cross-platform

5
推荐指数
1
解决办法
1402
查看次数

宏识别WinRT?

如果应用程序在WinRT上运行,是否有新的宏来确定代码?正如我正在使用的那样LoadLibrary,如果有一个宏来替换所有来自LoadLibrary一个的调用,那就太棒了LoadPackagedLibrary......

我理解文档是正确的,因为我可以加载任何DLL(只要它在我的包中)LoadPackagedLibrary,对吧?!(只要该DLL不使用黑名单的API ......)

c++ windows-8 windows-runtime

5
推荐指数
1
解决办法
4116
查看次数

错误地实现了强类型枚举的语法?

我目前正在为Visual Studio 2012测试11月份的CTP,并遇到了一个有趣的问题:标准强制要求强类型枚举enumstruct/ class关键字必须在同一行或者是实现中的错误应该报告给微软?

这编译:

enum struct name : type { ...
Run Code Online (Sandbox Code Playgroud)

这不(C2332)

enum
struct name : type { ...
Run Code Online (Sandbox Code Playgroud)

编辑:正如詹姆斯所说,这是一个实施中的错误,并向微软报告

c++ ctp visual-c++ c++11 visual-studio-2012

4
推荐指数
1
解决办法
288
查看次数

dlopen/LoadLibrary在同一个应用程序上

我需要从我自己的应用程序中调用导出的符号 - 因此我需要知道调用dlopen/ LoadLibrary打开"自己" 是否安全.

一个例子是:

LoadLibrary("test.exe");
Run Code Online (Sandbox Code Playgroud)

在一个叫做的程序中test.exe.

我测试了它似乎工作,但我不太确定它是否真的支持行为.

c c++ loadlibrary dlopen

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

C++模板基于模板参数添加/启用构造函数

在以下场景中是否可以为模板的某些特化定义专用构造函数:

template<typename T, size_t D>
class vector {
  T values[D];
public:
  vector();
};
Run Code Online (Sandbox Code Playgroud)

我想添加的构造函数依赖于D参数:

template<typename T>
vector<T, 2>::vector(T t1, T t2) { ... }

template<typename T>
vector<T, 3>::vector(T t1, T t2, T t3) { ... }

template<typename T>
vector<T, 4>::vector(T t1, T t2, T t3, T t4) { ... }
Run Code Online (Sandbox Code Playgroud)

c++ templates template-specialization

1
推荐指数
1
解决办法
819
查看次数