我正在观看Walter Brown的CppCon2014关于模板元编程的第二部分,在此期间他讨论了他的新颖void_t<>结构的用法.在他的演讲中,Peter Sommerlad问他一个我不太明白的问题.(链接直接转到问题,正在讨论的代码直接发生在那之前)
索默拉德问道
沃尔特,这是否意味着我们现在实际上可以实现概念精简版?
沃尔特回应了什么
哦耶!我已经完成了......它没有完全相同的语法.
我理解这个交换是关于Concepts Lite的.这种模式真的那么多才多艺吗?无论出于何种原因,我都没有看到它.有人可以解释(或描绘)这样的事情会是什么样子?这是关于enable_if和定义特征,还是提问者指的是什么?
该void_t模板定义如下:
template<class ...> using void_t = void;
Run Code Online (Sandbox Code Playgroud)
然后他使用它来检测类型语句是否格式正确,使用它来实现is_copy_assignable类型特征:
//helper type
template<class T>
using copy_assignment_t
= decltype(declval<T&>() = declval<T const&>());
//base case template
template<class T, class=void>
struct is_copy_assignable : std::false_type {};
//SFINAE version only for types where copy_assignment_t<T> is well-formed.
template<class T>
struct is_copy_assignable<T, void_t<copy_assignment_t<T>>>
: std::is_same<copy_assignment_t<T>,T&> {};
Run Code Online (Sandbox Code Playgroud)
由于这个话题,我理解这个例子是如何工作的,但是我没有看到我们如何从这里得到像Concepts Lite这样的东西.
这是实体框架:
var department = _context.Departments
.Include(dep => dep.Employees.Select(emp => emp.ContactTypes))
.SingleOrDefault(d => d.Id == departmentId);
Run Code Online (Sandbox Code Playgroud)
在这里,我希望返回一个部门,其中包含所有相关员工以及每个员工的所有联系类型.
这是ormlite servicestack:
我不知道.当我查看docu/samples时:https://github.com/ServiceStack/ServiceStack.OrmLite
他们写:
现在,Expression支持可以使用强类型API来满足大多数简单查询.对于任何更复杂的事情(例如,使用表连接的查询),您仍然可以轻松地回退到原始SQL查询,如下所示.
我已经看到有一个JoinSqlBuilder类,但我不认为它可以返回嵌套集合.
也许我想要的是不可能的,但也许我可以做一个妥协,比如让所有员工都参加部门会议.然后我记忆员工并获取某个employeeId的所有联系人类型.创建层次结构并分配列表仍然是我的工作.
但我希望有一个更短的解决方案.
什么也没关系,当查询但它可能看起来像返回一个具有3个平面属性的对象(动态?):Department,Employees,ContactTypes并为我的DTO分配thoese属性.
我正在尝试加载tga/bmp文件.这很好,但最终结果如下:

我正在尝试加载的图像如下所示:

我正在使用的一些代码:
GLuint texture;
const char* filename = "/Users/Admin/Documents/Visual Studio 2013/Projects/OpenGL/OpenGL/image.tga";
unsigned char* data;
data = (unsigned char *) malloc(128 * 128 * 3);
FILE* f;
fopen_s(&f, filename, "rb");
fread(data, 128 * 128 * 3, 1, f);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 128, 128, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
Run Code Online (Sandbox Code Playgroud)
有人知道我做错了什么吗?
我似乎无法找到参考.我假设PHP函数file_exists在linux上使用系统调用,并且这些对于任何不包含\0字符的字符串都是安全的,但我想确定.
有没有人(最好是非轶事)有关此事的信息?如果我不先检查字符串,是否易受注射?
是否允许c ++ 14中的成员函数返回类型推导,或仅适用于自由函数?
我问,因为我有点暗示它会起作用,但是在gcc 4.8.1中我得到一个内部编译器错误("在gen_type_die_with_usage中").我第一次遇到这样一个神秘的错误,所以我有点怀疑; 我知道他们从那时起就改变了规范.
为清楚起见,这对我有用:
auto foo() {return 5;}
Run Code Online (Sandbox Code Playgroud)
但这不是:
class Bar{
auto baz() {return 5;}
}
Run Code Online (Sandbox Code Playgroud)
标准草案允许这样做吗?
我正在尝试使用 Momentics IDE 2.0 版创建 BB10 级联项目,并且我需要该项目使用 GNU 标准库而不是 Dinkumware(因为我编译的外部库仅arm-unknown-nto-qnx8.0.0eabi-g++支持 gnu std)。
在 IDE 中,我已将“项目属性”->“C/C++ 构建/设置/运行时”更改为“C++ GNU,但有例外”。但是,当我使用我创建的静态库(.a 文件)运行一个简单的项目(仅包含一个包含构造函数、std::string对象、setter 和 getter(针对对象)以及相应的 cpp 文件的头文件)时,我得到当我这样做时出现分段错误:
testnamespace::testclass *object = new testnamespace::testclass();
std::string test = "Hello";
object->setText(test);
delete object;
Run Code Online (Sandbox Code Playgroud)
我认为出现此错误是因为该库是使用 gnu std 编译的,而该项目是使用 Dinkumware 编译的。
我验证了包含路径,我发现
C:\bbndk\target_10_1_0_428\qnx6\usr\include
Run Code Online (Sandbox Code Playgroud)
包含在之前
C:\bbndk\target_10_1_0_428\qnx6\usr\include\c++\4.6.3
Run Code Online (Sandbox Code Playgroud)
另外,makefile 用于编译项目中的 cpp 文件的命令不是qcc -Vgcc_ntoarmv7le( qcc -V4.6.3,gcc_ntoarmv7le_gppgnu stl 的支持标志)。
难道我做错了什么?缺少某些配置?
我确实需要在我的 BlackBerry 项目中使用 GNU STD 而不是 Dinkumware,但我不知道该怎么做。
编辑:
我对我的项目进行了一些更改并修复了一些问题。
我将其添加到我的 .pro 文件中
QMAKE_CXX = qcc -V4.6.3,gcc_ntoarmv7le_gpp
QMAKE_CC = qcc …Run Code Online (Sandbox Code Playgroud) 我怎么能按字母顺序排序然后按int类中的变量排序?我如何组合它们,如果counter相同,它将按字母顺序返回?
// sort pages by its popularity
bool popularity(const Page &a, const Page &b) {
return a.counter > b.counter;
}
// alphabetical sort
bool alphaSort(const Page &a, const Page &b) {
return a.name < b.name;
}
// Combination?
sort(.begin(), .end(), ??)
Run Code Online (Sandbox Code Playgroud) 我正在运行以下命令,我想将输出对齐到左边...只是无法搞清楚:
基本上,这是为我提供特定目录的大小,它是正确对齐的.
Get-ChildItem c:\users\xxx\desktop -recurse | Measure-Object -property length -sum|Select-object @{Name="Total size GB "; Expression={$_.Sum / 1GB}} >> c:\users\xxx\desktop\pwr\bkp.txt
我遇到了JAVA地图的问题.我在地图中输入一个对象作为键.然后我修改了键,地图不再将对象视为地图的键.即使对象内部的键已相应修改.
我正在使用CoreLabelStanfordNLP 的对象,但它适用于我猜的一般情况.
Map <CoreLabel, String> myMap = new HashMap...
CoreLabel key = someCreatedCoreLabel
myMap.put(key, someString)
myMap.get(key) != null ----> TRUE
key.setValue("someValue");
myMap.get(key) != null ----> FALSE
Run Code Online (Sandbox Code Playgroud)
我希望我很清楚.问题是为什么最后一个陈述是假的?我不是一个非常有经验的程序员,但我希望它是真的.也许与CoreLabel物体有关?
我检查是否.equals()仍然存在,它确实存在
for(CoreLabel token: myMap.keySet()) {
if(key.equals(token))
System.out.println("OK");
}
Run Code Online (Sandbox Code Playgroud) 我用C#编程的最后几年,现在我又回到了C++.在C#中,enums的行为如下:
enum myenum { a,b,c}
myenum myinstance = myenum.a;
Run Code Online (Sandbox Code Playgroud)
所以我可以这样做:
enum myenum { a,b,c}
enum myenum2 { a,b,c}
myenum myinstance = myenum.a;
Run Code Online (Sandbox Code Playgroud)
一切都会好的.
在C++中它不能编译,而且我现在不能使用a(b或者c)作为类名或其他任何东西,它似乎写作:
enum myenum { a, b };
Run Code Online (Sandbox Code Playgroud)
与声明全局int变量相同:
int a =0, b=1;
Run Code Online (Sandbox Code Playgroud)
我不明白为什么C++的开发人员为枚举选择这种行为,以及枚举是什么?它是一种类型?或者只是编译器替换某些int声明的东西?