请原谅我,如果已经提出这个问题,我没有找到任何特定问题的答案.
我在库中创建了一个类,我希望某些类能够创建和销毁,其他类可以访问其他公共函数.有一个friend class不是我想要的,因为朋友类将访问我不想要的成员变量和成员函数.我偶然发现了这个几乎可以工作的习语,除了析构函数,因为它不能采用其他参数.有了这个成语,我得到:
class B;
class A
{
public:
class LifecycleKey
{
private:
LifecycleKey() {}
friend class B;
};
A(LifecycleKey); // Now only class B can call this
// Other public functions
private:
~A(); // But how can I get class B to have access to this?
void somePrivateFunction();
// Members and other private functions
};
Run Code Online (Sandbox Code Playgroud)
如上面的代码中所提到的,该解决方案不允许仅class B访问析构函数.
虽然上述问题都没有任何影响,因为我总是可以将ctor和dtor公之于众,并且只是说"RTFM".
我的问题是:
有没有办法限制访问ctor和dtor到特定的类(但只有ctor和dtor),同时坚持更熟知的语法(如果人们想要的东西在堆栈上,通过删除销毁,等等)?
任何帮助是极大的赞赏!
解
在 A.h
class B;
class A
{
protected:
A() …Run Code Online (Sandbox Code Playgroud) 我正在编写一个Android应用程序,在其中,我有一个VirtualDisplay镜像屏幕上的内容,然后我将帧从屏幕发送到一个实例MediaCodec.它有效,但是,我想添加一种指定编码视频的FPS的方法,但我不确定如何这样做.
根据我的阅读和实验,丢弃编码的帧(基于演示时间)不能很好地工作,因为它最终会产生块状/伪影的视频,而不是低帧率的平滑视频.其他阅读表明,做我想要的唯一方法(限制FPS)将限制传入的FPS到MediaCodec,但是VirtualDisplay刚收到一个Surface由MediaCodec下面构造的
mSurface = <instance of MediaCodec>.createInputSurface();
mVirtualDisplay = mMediaProjection.createVirtualDisplay(
"MyDisplay",
screenWidth,
screenHeight,
screenDensity,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
mSurface,
null,
null);
Run Code Online (Sandbox Code Playgroud)
我也试过子类Surface和限制被馈送到帧MediaCodec通过unlockCanvasAndPost(Canvas canvas),但该功能似乎从来没有对我的情况下被调用,因此,有可能是我如何延长一些古怪Surface以及与互动Parcel的writeToParcel功能被称为上我的实例,但这是在我的实例中调用的唯一函数(我可以告诉).
其他阅读建议我可以从编码器 - >解码器 - >编码器,并限制第二个编码器馈送帧的速率,但这是很多额外的计算,如果我可以避免它,我宁愿不做.
有没有人成功限制VirtualDisplay饲喂它的速度Surface?任何帮助将不胜感激!