1
我對C++和JNI不太瞭解,所以我對這段代碼的某些部分(這是Android框架的一部分,更確切地說來自CPP源代碼在Surface
類):從Android內核中解開一些JNI C++代碼
static void Surface_unlockCanvasAndPost(
JNIEnv* env, jobject clazz, jobject argCanvas)
{
jobject canvas = env->GetObjectField(clazz, so.canvas);
if (canvas != argCanvas) {
doThrow(env, "java/lang/IllegalArgumentException", NULL);
return;
}
const sp<Surface>& surface(getSurface(env, clazz));
if (!Surface::isValid(surface))
return;
// detach the canvas from the surface
SkCanvas* nativeCanvas =
(SkCanvas*) env->GetIntField(canvas, no.native_canvas);
int saveCount = env->GetIntField(clazz, so.saveCount);
nativeCanvas->restoreToCount(saveCount);
nativeCanvas->setBitmapDevice(SkBitmap());
env->SetIntField(clazz, so.saveCount, 0);
// unlock surface
status_t err = surface->unlockAndPost();
if (err < 0) {
doThrow(env, "java/lang/IllegalArgumentException", NULL);
}
}
什麼特別困擾我的是:
const sp<Surface>& surface(getSurface(env, clazz));
這只是我百思不得其解。沒有等號,這些模板讓它更難理解。
有人可以幫我解決這個特定的代碼行嗎?
華麗。非常感謝!儘管如此,它確實打敗了我作爲一種語法。 –
那麼,對於一個有值類型的語言來說是有意義的,編寫'MyObject i(「foo」);'而不是'MyObject i = MyObject(「foo」);''是方便的。 – themel
你知道這種表示法是否有名字,因爲它在覈心cpp文件中無處不在。這對Java開發人員來說確實令人不安。另外,你知道這樣的語法在C中是否有效嗎? –