小编Edw*_*nge的帖子

如何在可变参数函数中的所有参数上调用std :: forward?

我只是编写一个通用对象工厂并使用boost预处理器元库来创建一个可变参数模板(使用2010并且它不支持它们).我的函数使用rval引用并std::forward进行完美的转发,它让我思考...当C++ 0X出来并且我有一个标准编译器时,我会使用真正的可变参数模板.但是,我怎么称呼std::forward这些论点?

template <typename ...Params>
void f(Params... params) // how do I say these are rvalue reference?
{
    y(std::forward(...params)); //? - I doubt this would work.
}
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法就是需要手动拆包... params,我也不是那里.是否有更快的语法可行?

c++ rvalue-reference variadic-templates perfect-forwarding c++11

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

Qt,MSVC和/ Zc:wchar_t- ==我想炸毁这个世界

因此Qt在Windows上用/ Zc:wchar_t-编译.这意味着不是wchar_t是某个内部类型的typedef(我认为是__wchar_t),它就变成了一个typedef unsigned short.关于这一点非常酷的是MSVC的默认值是相反的,这当然意味着你正在使用的库可能与wchar_tQt的类型不同wchar_t.

在您尝试使用std::wstring代码中的内容之前,这不会成为问题; 特别是当一个或多个库具有接受它作为参数的函数时.实际上有效的是,您的代码很快就会编译,但之后无法链接,因为它正在寻找使用的定义,std::wstring<unsigned short...>但它们只包含期望std::wstring<__wchar_t...>(或其他)的定义.

所以我做了一些网络搜索并遇到了这个链接:https://bugreports.qt.io/browse/QTBUG-6345

基于Thiago Macieira的声明,"抱歉,我们不会支持像这样建立Qt",我一直担心将Qt固定在其他所有工作上可能会导致一些问题并且一直试图避免它.我们使用/ Zc:wchar_t-标志重新编译了所有支持库,直到几天前我们开始尝试移植(我们正在从Wx切换到Qt的过程中)一些序列化码.

由于win32如何工作,并且因为Wx只是包装了win32,我们一直std::wstring用来表示字符串数据,目的是尽可能地让我们的产品尽可能地准备好.我们做了一些测试,Wx在尝试打印特殊内容时没有使用多字节字符(即使不是像程度符号这样特殊的东西也是问题).我不太确定Qt有这个问题,因为QString不仅仅是底层_TCHAR类型的包装,而是某种类型的Unicode怪物.

无论如何,boost中的序列化库已经编译了部分.我们试图用/ Zc:wchar_t-重新编译boost,但到目前为止,我们试图告诉bjam这样做的尝试都没有受到重视.我们陷入了僵局.

从我坐的地方我有三个选择:

  1. 重新编译Qt并希望它适用于/ Zc:wchar_t.网上有一些证据表明其他人已经做到了,但我无法预测会发生什么.所有在论坛等问Qt人的尝试都没有得到答复.地狱,即使在那个非常错误的报告中,有人问为什么,它只是在那里坐了一年.

  2. 继续与bjam战斗,直到听.现在我有一个人在我这样做,我有更多的经验与事情争取得到我想要的东西,但我不得不承认厌倦了它.我也担心我会因为Qt想要接受这个问题而继续讨论这个问题.

  3. 停止使用wchar_t进行任何操作.不幸的是,我的i18n经验几乎为0,但在我看来,我只需要找到QString中的函数(它有一个BUNCH)来将Unicode编码为8字节,反之亦然.UTF8函数看起来很有前途,但我真的希望确保如果来自Zimbabfuckegypt的人开始使用他们自己的语言编写并且QString中的文档让我想到可能发生的事情,那么数据就不会丢失.当然,我总是遇到一些坚持使用wchar_t的库,然后我又回到了1或2但是我怀疑会发生这种情况.

那么,我的问题是什么......

以下哪个选项是我最好的选择?Qt最终会让我掏出自己的眼睛,因为我决定用/ Zc:wchar_t编译它吗?

什么是使用/ Zc来加强构建的神奇咒语:wchar_t-并且会导致永久性的精神伤害吗?

我是否可以使用标准的8位(好的,"常见的")字符类并且符合i18n标准/准备就绪?

其他Qt开发人员如何处理这个烂摊子?

c++ qt boost internationalization

36
推荐指数
2
解决办法
8648
查看次数

VS2010中的前向/强大枚举

http://blogs.msdn.com/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx上有一个表格,显示了C++ 0x的功能这是在2010年RC实施的.其中列出了转发枚举和强类型枚举,但它们被列为"部分".该文章的主要内容表明,这意味着它们要么不完整,要么以某种非标准的方式实施.

所以我有VS2010RC并正在玩C++ 0x功能.我无法解决这些问题,也无法找到有关这两个功能的任何文档.甚至最简单的尝试都没有编译.


enum class E { test };
int main() {}

fails with:

1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C2332: 'enum' : missing tag name
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C2236: unexpected 'class' 'E'. Did you forget a ';'?
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C3381: 'E' : assembly access specifiers are only available in code compiled with a /clr option
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C2143: syntax error : missing ';' before '}'
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C4430: missing type specifier - int assumed. Note: C++ …

c++ visual-studio-2010 c++11

27
推荐指数
2
解决办法
9451
查看次数

MFC的替代品

/sf/ask/10478891/

许多赞成的评论声称有更好的选择.我想知道它们可能是什么.

我的主要要求是UI使用本机小部件,以便我们的自动化软件可以工作.所有者绘制的窗口更难驾驶.

我并不是特别喜欢MFC的设计,所以替代方案会很好.我发现的只有一个是WX,这是我们已经尝试过的并且正在考虑放弃的.我们需要一些不会迫使我们与一堆我们不关心的跨平台包装进行斗争的东西.我们正在编写一个Windows应用程序,并且市场营销并没有针对Mac或Linux提供一个单一的废话(是的,这也让我的屁股受伤).

我已经看了一下.NET选项.问题是我不太了解它,但据我所知,我们必须使用C#来获得MFC随时可用的许多选项.例如,C++/CLI工具包似乎没有乍一看的停靠窗口.事实上,WinFroms直接选项似乎也没有.看起来我们必须制作一个WPF项目,而这看起来根本不是我们真正想要的东西(除了另一个工具包之外,我们还有大量的废话要学习).搬出C++也需要大量的包装,我并不特别喜欢我从自动包装器中看到的结果.

我对.NET选项的另一个问题是我们有一个非常强大的绘图应用程序(除了需要很多表单).我知道你可以用.NET之类的JIT语言获得类似的结果,但我也知道你必须要小心谨慎.这是一个我想避免担心的问题.

.NET(至少是交换语言)的另一个也许是最重要的问题是我们有大量的接口逻辑虽然应该是API不可知的,但它是用C++编写的.

那么其他选择是什么?这些人真的有分数,或者他们只是对任何不是他们喜欢的语言或工具包的东西大喊大叫?

注意:
这里有什么问题?我特别说到移植到其他平台甚至都不是一个考虑因素,而且我必须拥有使用本机小部件集的东西,所以我们不必完全改变测试用于自动化产品的所有东西!有没有人真正读过我的问题?

c++ windows user-interface

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

Windows中的C头文件在哪里?

我是Windows开发的新手,已经在Linux中搞砸了一段时间.我需要访问控制台功能,并且无法从Web上获取控制台文本属性的完整列表.我想阅读wincon.h和windows.h来获取信息,但我无法弄清楚如何获取它们.请帮忙!

c windows

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

Qt自动化测试

http://www.automatedqa.com/products/testcomplete/testing-qt-apps/

他们怎么能做到这一点?有Qt检查库吗?标准窗口间谍工具在某些区域中起作用,但是其他重要区域(例如列表视图中的列表项)不能通过Windows消息检查.

我知道有QtTest框架,但我想要的是可以访问整个应用程序的东西,以便我可以进行自动集成测试.

c++ windows qt automated-tests

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

如何强制在库中包含"未使用的"对象定义

我的问题类似于这些,但似乎并没有完全相关:

如何在链接到可执行文件时强制将对象文件包含在静态库中?

使用MSVC强制符号导出

我得到的是这样的:

struct thingy;
struct container
{
  static container& instance(); // singleton

  int register_thingy(thingy*);
};

struct thingy
{
  virtual ~thingy() {}
  virtual int id() const = 0;
};

//template trick to force registration.
template < typename Derived >
struct registered_thingy : thingy
{
  registered_thingy() : my_id(my_static_id) {} 

  int id() const { return my_id; }
private:
  int my_id;
  static int my_static_id;
}
template < typename Derived >
int registered_thingy<Derived>::my_static_id = 
  container::instance().register_thingy(new Derived);
Run Code Online (Sandbox Code Playgroud)

现在,concrete_thingy.cpp我在一个文件中:

struct my_concrete_thingy : registered_thingy<my_concrete_thingy> …
Run Code Online (Sandbox Code Playgroud)

c++ linker

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

将一个以null结尾的const char*字符串数组转换为std :: vector <std :: string>

我有一个Visual Studio 2008 C++函数,我给出了一个以null结尾的字符串数组和该数组中字符串const char*数的计数.

我正在寻找一种巧妙的方法来将数组转换const char*为astd::vector< std::string >

/// @param count - number of strings in the array
/// @param array - array of null-terminated strings
/// @return - a vector of stl strings
std::vector< std::string > Convert( int count, const char* array[] );
Run Code Online (Sandbox Code Playgroud)

提升很好,STL很好.

谢谢,PaulH

c++ string stl vector

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

VS2010分析器/泄漏检测

有人知道可以使用VS2010代码的分析器和检漏仪吗?最好是在Win7上运行的.

我在这里和谷歌搜索过.我找到了一个可以工作的检漏仪(Memory Validator),但我并没有太深刻的印象.首先,它显示了一堆菜单泄漏和我相当自信的东西并不真实.我也尝试过GlowCode,但它只是一个分析器而且拒绝在win7上安装.

我曾经使用过AQtime.它拥有我需要的一切,内存/资源泄漏检测,各种事物的分析,静态分析等.不幸的是,它现在给出了虚假的结果.

我的主要直接问题是VS2010说在VS2005中没有任何程序泄漏.我几乎肯定这是误报,但我似乎无法找到一个好的工具来验证这一点.内存验证器没有显示相同的内容,并且VS的泄漏报告似乎不合理.

c++ visual-studio-2010 windows-7

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

使用预处理器从f(列表)中删除参数列表

在我看来,我在升级库中看到了一些奇怪的事情,它最终正是我现在正在尝试做的事情.虽然找不到它......

我想创建一个接受签名并将其转换为函数指针的宏:

void f(int,int) {}

...
void (*x)(int,int) = WHAT( (f(int,int)) );

x(2,4); // calls f()
Run Code Online (Sandbox Code Playgroud)

我特别需要这个来处理成员函数指针,以便WHAT需要两个参数:

WHAT(ClassType, (f(int,int)); // results in static_cast<void (ClassType::*)(int,int)>(&ClassType::f)
Run Code Online (Sandbox Code Playgroud)

这不是绝对必要的,以解决我的问题,但它会使事情变得更好.


这个问题本身与函数指针没什么关系.需要做的是使用预处理器来获取"f(int,int)"并将其转换为两个不同的部分:

'f''(int,int)'


为什么:

我已经解决了这里提出的问题:实用地生成Qt Q_OBJECT类

我开始解释如何做到这一点的一系列文章: http://crazyeddiecpp.blogspot.com/2011/01/quest-for-sane-signals-in-qt-step-1.html HTTP:// crazyeddiecpp .blogspot.com/2011/01 /追求换理智信号-在-QT步2.HTML

签名必须从用户尝试连接的"信号"进行评估,并准确匹配.Qt用户习惯于表达这一点SIGNAL(fun(param,param)),所以connect_static(SIGINFO(object,fun(param,param)), [](int,int){})不会觉得太奇怪.

为了构造签名,我需要能够将其从提供的参数中拉出来.有足够的信息来获取成员函数地址(使用C++ 0x的decltype)并获取签名以生成适当的包装器,但我看不出如何将其取出.我能想出的最接近的是SIGINFO(object, fun, (param,param)),这可能已经足够好了,但我想在考虑不可能获得我更喜欢的确切语法之前我会问这里.

c++ c-preprocessor

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