草庐IT

dependent-type

全部标签

c++ - Visual Studio : how to handle project dependencies right?

我正在编写一个程序(用C++),它需要多个VS项目,我想将它们放入同一个VS解决方案中。我正在使用VisualStudio2010。这里只是想要的架构:我正在为我的项目使用第3方库(A),我有所有的头文件和.lib文件,我用源代码编译。有了这个库,我正在编写自己的类和函数。那是我的项目(B)。然后我想为用户开发两个界面:命令行界面(C1)和GUI界面(C2),它们使用(B)中定义的类和函数。A我是VisualStudio的新手,我不知道如何正确处理这些依赖项。我应该使用项目依赖项(在解决方案属性中)还是引用(在项目属性中)?事实上,我不确定依赖项和引用到底在做什么。我应该将B编译成某个

c++ - 如何确定 std::type_index 是否对我的编译器是唯一的?

标准是否规定std::type_index(typeid(obj))的调用对于该类型是唯一的?我找不到这方面的信息。从type_info::name()我得到了这个:Returnsanimplementationdefinednull-terminatedcharacterstringcontainingthenameofthetype.Noguaranteesaregiven,inparticular,thereturnedstringcanbeidenticalforseveraltypesandchangebetweeninvocationsofthesameprogram.(来

c++ - 为什么 type_info::name() 未指定?

我完全知道std::type_info::name()的返回值是实现定义的。来自C++标准(ISO/IEC14882:2003§18.5.1.7):Returns:animplementation-definedNTBS.我的问题是:为什么?如果标准规定了返回值应该是什么,这个成员函数不是更有用吗? 最佳答案 基本上,如果一个实现决定他们不能或不想支持RTTI,他们可以return"";。如果标准强制它返回某些东西,他们可能会扼杀任何为RTTI资源不存在或想要禁用的环境(例如微芯片)提供兼容编译器的能力。别忘了我们不想在任何编译器上

C++ : how do I use type_traits to determine if a class is trivial?

在C++0x中,我想确定一个类是否简单/是否具有标准布局,以便我可以使用memcpy()、memset()等...我应该如何使用type_traits实现下面的代码,这样我才能确认一个类型是微不足道的?templateboolisTrivialType(){boolisTrivial=???returnisTrivial;}注意:is_pod()限制太多:我希望我的类有简单的构造函数等......为了方便。补充:我认为std::is_standard_layout可能会给我我正在寻找的东西。1.如果我添加构造函数,它仍然返回true2.如果我添加一个虚方法,它返回false这是我需要确

c++ - 如何使用 type_traits 检测字符串文字?

我如何可靠地对任何不是字符串文字的内容进行static_assert?例如,在下面的代码中,我试图包装标准断言宏,但静态拒绝消息的任何不是字符串文字的内容(因为当断言触发时,除了字符串文字之外的任何内容都不会在运行时显示).#include#include#include#definemy_assert(test,message)\static_assert(\(\!std::is_pointer::value&&\!std::is_array::value\),\"literalstringrequired"\);\assert((message,(test)));intmain()

c++ - 函数参数中的 `type_alias<char[N]>{}` VS `char[N]{}`

环境:x86-64Clang6.0.0函数的定义:voidfoo(constchar*){}foo(char[16]{});//houston,thereisaproblem!foo(type_alias{});//compilehappilytype_alias很简单:templateusingtype_alias=T;livedemon作为注释,case1case2时无法编译能够。我知道aliasdeclarations与using不是文本替换(如#define),它是该类型的同义词。但我仍然不知道如何解释这种情况。然后我给GCC一个try:prog.cc:Infunction'i

c++ - Clang claims that `member reference base type ' X' is not a structure or union`,但 X 是具有推导参数的结构模板

考虑以下代码:templatestructX{X(T){}voidfoo(){}};templatestructY{intobject=0;voidbar(){X(object).foo();}};Liveongcc.godbold.orgGCC8.2编译它,而Clang7吐出以下错误::13:18:error:memberreferencebasetype'X'isnotastructureorunionX(object).foo();~~~~~~~~~^~~~这对我来说像是一个错误。条件非常具体:如果任一结构不是模板,或者object不是成员变量,或者不涉及CTAD(类模板参数推导

c++ - 模板错误 : nontype ".. [with T=T] is not a type name"

尝试对我的内存对齐进行类型定义,我得出了以下结构(由于我需要更正GNU版本,该结构仍在进行中):#ifdefined(__GNUG__)templatestructsfo_type{typedefT*restrict__attribute__((aligned(32)))aptr32;};#elifdefined(__INTEL_COMPILER)templatestructsfo_type{typedefT*restrict__attribute__((aligned(32)))aptr32;};#endif然后我尝试像这样使用它:templateclasstsfo_vector{p

c++ - 从 int 转换为 std::array<unsigned char, 1ul>::value_type 可能会改变其值

编译此程序时,-WconversionGCC参数产生标题中的警告:#include#include#includeintmain(){std::stringtest="1";std::arraybyteArray;byteArray[0]=byteArray[0]|test[0];return0;}这是我编译它的方式:g++--Wall-Wextra-Wconversion-pedantic-std=c++0xtest.cpp我使用的是GCC4.5。我在这里做违法的事情吗?它会在某些情况下引起问题吗?为什么|会产生一个int? 最佳答案

C++11 枚举转发导致 "underlying type mismatch"

我在C++11中工作,包括一个在C++03中实现的h文件。在我包含的h文件中,定义了一个枚举Foo。我想在code.h中声明一个转发到它并在code.cpp中使用它:标题.h:enumFoo{A=1};代码.h:enumFoo:int;//alsotried:unsignedint,long,short,unsignedshort,char,unsignedcharvoidbar(Foofoo);代码.cpp:#includeheader.hvoidbar(Foofoo){}这是我在编译时遇到的错误(测试了g++4.8.5和g++5.3.1):Infileincludedfromcod