请考虑以下代码:
#include <iostream>
template<typename T>
void f(T x) {
std::cout << sizeof(T) << '\n';
}
int main()
{
int array[27];
f(array);
f<decltype(array)>(array);
}
Run Code Online (Sandbox Code Playgroud)
编者注:使用的原始代码typeof(array),但这是一个GCC扩展.
这将打印
8 (or 4)
108
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,数组显然衰减到指针而T变为int*.在第二种情况下,T被迫int[27].是否定义了衰变/替代实施的顺序?是否有更优雅的方式强制类型int[27]?除了使用std :: vector?
既然Apple正在运行某种静态分析来自动检查私有API的使用,那么很多人都因为Three20库而被捕.我使用另一个第三方库(我自己从代码中编译),我想在提交给Apple之前自动审核它以供私有API使用,所以我可以删除/重写这些部分.
如果我运行nm我的应用程序可执行文件,我会得到一个符号列表,我看到那些我不使用的符号.例如,我看到_AudioServicesPlaySystemSound,如果我在XCode中搜索"AudioServicesPlaySystemSound",我得不到任何结果.有没有办法自动区分对私有API的调用,例如我注意到Apple习惯用初始下划线命名它们.
但是:如果我故意包含对私有API的调用,它不会显示在输出中nm,但如果我strings在二进制文件上运行它会显示.基于此,我的一个想法是将所有私有API调用的大量列表编译成一个巨大的表,并在字符串输出中自动搜索它们.我还没有这样做.
有没有人有关于如何自动捕捉这些东西的任何提示,所以我只进行一次审查过程?
这似乎是一个愚蠢的问题,但这是漫长的一天.我正在调整一些Perl代码以供其他用途,我遇到了这种语法:
my @request;
#... fill the array with stuff...
my $reply = $service->call('requestMessage' => @request, $header);
Run Code Online (Sandbox Code Playgroud)
该方法调用似乎难以置信,如果=>只是一种特殊的逗号而且@request被插入到列表中.
它实际上相当于:
my $reply = $service->call('requestMessage' => \@request, $header);
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
编辑:谢谢你的答案.我很清楚传递值和传递参考之间的区别.我问的是,一个明显的值传递是否被转换为参考传递.显然不是.谢谢大家回答.
是否有一个经验法则来决定何时使用旧语法()而不是新语法{}?
要初始化结构:
struct myclass
{
myclass(int px, int py) : x(px), y(py) {}
private:
int x, y;
};
...
myclass object{0, 0};
Run Code Online (Sandbox Code Playgroud)
现在,vector例如,它有许多构造函数.每当我做以下事情时:
vector<double> numbers{10};
Run Code Online (Sandbox Code Playgroud)
我得到一个1元素的向量而不是一个有10个元素的向量,因为其中一个构造函数是:
explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );
Run Code Online (Sandbox Code Playgroud)
我怀疑每当一个类定义一个initializer list构造函数时,就像一个向量一样,它会被{}语法调用.
所以,我正在思考的是正确的.即只有当一个类定义一个初始化列表构造函数来调用另一个构造函数时,我才应该恢复到旧的语法吗?例如,纠正上述代码:
vector<double> numbers(10); // 10 elements instead of just one element with value=10
Run Code Online (Sandbox Code Playgroud) 为什么favicon消失了
背景:
我有我的网站根据mvc制作所以,我将有一个前控制器和一个主布局所有其他视图将加载在主布局的$ content变量中.主要布局用链接rel"shortcut favicon"保存标签.
当我在子视图中查看链接时,favicon会消失.这发生在firefox上.
IE是可以的,但无论如何都要坚持下去,即使你想要摆脱它.
所以,简而言之, - 可能有这样的解释吗?
我在内部Web应用程序中使用System.DirectoryServices.AccountManagement时遇到了一个问题.错误不是很具描述性,但是这是正在发生的事情:
当我尝试验证AD中是否存在提供的用户ID时,我使用以下代码:
private bool IsWindowsIDValid(string strWindowsID)
{
var context = new PrincipalContext(ContextType.Domain, "DOMAINSERVER", "DC=DOMAINNAME,DC=net");
var userPrincipal = UserPrincipal.FindByIdentity(context, strWindowsID);
return (userPrincipal != null);
}
Run Code Online (Sandbox Code Playgroud)
但是,在第二行抛出异常,其中调用FindByIdentity.以下是异常详细信息:
消息:"发生了操作错误."
堆栈跟踪:
在System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()在System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()在System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()在System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()在系统System.DirectoryServices上的System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context,Type principalType,String identityValue)中的.DirectoryServices.AccountManagement.Principal.FindBdentIdentityWithTypeHelper(PrincipalContext context,Type principalType,Nullable`1 identityType,String identityValue,DateTime refDate) .AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context,String identityValue)at*****.IsWindowsIDValid(String strWindowsID)in*****.ascx.cs:line 193
如果我尝试检查PrincipalContext的ConnectedServer属性,也会发生同样的错误.但是,我可以尝试根据上下文验证凭据(使用context.ValidateCredentials()),它将通过正常.
关于可能发生的事情的任何想法?我可以在我的机器上的独立控制台脚本中运行此代码 - 当我尝试调试webapp时,这发生在VisualStudio内部的本地开发环境中.这可能是权限问题还是其他问题?我在这一点上很丢失.
我感谢任何帮助!
-Patrick
输出:javap -s SomeClass
public org.someapp.SomeClass$_data data;
Signature: Lorg/someapp/SomeClass$_data;
Run Code Online (Sandbox Code Playgroud)
Java中SomeClass的定义:
class SomeClass
{
private class _data {
byte[] something = new byte[1234];
}
public _data data;
}
Run Code Online (Sandbox Code Playgroud)
Java中本机函数的定义:
public static native int NativeFunction(SomeClass something);
Run Code Online (Sandbox Code Playgroud)
Java实现:
SomeClass x = new SomeClass();
NativeInterface.NativeFunction(x);
Run Code Online (Sandbox Code Playgroud)
但是,执行以下代码时:
JNIEXPORT jint JNICALL Java_org_someapp_NativeInterface_NativeFunction(JNIEnv* env, jobject obj, jobject someobject) {
jclass some_class = (*env)->GetObjectClass(env, someobject);
jfieldID data = (*env)->GetFieldID(env, some_class, "data", "Lorg/someapp/SomeClass$_data");
}
Run Code Online (Sandbox Code Playgroud)
Java在GetFieldID调用上抛出"NoSuchFieldError;:data"异常.我不明白..签名很好(直接从javap复制).
请注意,获取更简单变量的字段ID(如无符号短(带有签名"S"))可以正常工作.
使用此成员初始化...
StatsScreen::StatsScreen( GameState::State level )
: m_Level( level ) {
...//
}
Run Code Online (Sandbox Code Playgroud)
我收到以下警告......
extended initializer lists only available with -std=c++0x or -std=gnu++0x
有关此警告的任何信息?
编辑:在我删除了一个分配给构造函数内部的值的成员之后警告消失了(无法通过成员初始化完成)并使其成为局部变量而不是类成员.仍然想知道警告意味着什么.
我已经开发了许多部门客户端 - 服务器应用程序,现在我已准备好开始将这些应用程序中的一个移动到SaaS模型.我已经完成了一些基本的Web开发,但在SaaS架构方面,我是一个新手.
在我尝试设计架构时,首先想到的问题之一是单租户与多租户的问题.各自的优缺点根据应用程序的类型和所需的规模而有很大差异,因此我想在下面描述我的应用程序和扩展需求,并希望其他人可以评论我应该如何开始使用该体系结构.
客户端 - 服务器应用程序当前包含Firebird数据库和Windows应用程序.该数据库包含大约20个表,其中包含4个主表中的几千条记录,以及各种查找和相关表中的几百条记录.虽然记录数量很少,但是大小可以变大,因为数据库可以包含大型BLOBS.每个客户都建立自己的数据库,并且组织内的少数用户与之相连.当我更新db模式时,会释放一个新的Windows应用程序,它会检查db模式,然后根据需要应用更新.
对于SaaS应用程序,我每年为100个(不是1000或数百万)新客户进行设计.我的第一个想法是使用多租户模型来简化更新(关闭将更新应用于一个数据库,然后启动).另一方面,单一租赁模型将提供一种方法,一次将更新推送给一组客户,并分散数据损坏的风险 - 即如果数据库出现问题,它将影响一个客户而不是所有客户.有了这个想法,我想到有一个单独的Web前端,可以在登录时连接到单个客户数据库.因此,当新客户创建帐户时,将创建新数据库(每个客户将根据客户需要拥有自己的具有多个用户的数据库).
在此模型中,db更新需要一个进程来遍历每个数据库以应用模式更改,或者需要在登录时触发以启动类似于当前正在使用的客户端 - 服务器模型的模式更新.
任何人都可以向我指出从客户端服务器移植到SaaS的类似应用程序的信息吗?或提供任何指针考虑?基本上我正在寻找采用部门应用程序并将其作为多个客户的自助服务网站提供的体系结构示例.感谢您的任何建议,资源等.