小编Dan*_*Dan的帖子

理解(简单?)C++部分模板专业化

注意:这似乎是一个问题的转贴:C++ - 重载模板化的类方法,并对该方法进行了部分说明

我已经将C++模板专业化的问题归结为一个简单的案例.

它由一个简单的2参数模板类组成Thing,我想专门Thing<A,B>::doSomething()研究它B=int.

#include <cstdio>

//
// A 3-parameter template class.
//
template <class A, class B>
class Thing
{
public:
    Thing(A a, B b) : a_(a), b_(b) {}
    B doSomething();
private:
    A a_;
    B b_;
};

//
// The generic case works as expected.
//
template <class A, class B>
B Thing<A,B>::doSomething()
{
    return b_;
}

//
// This specialization does not work!
//
template <class A>
int Thing<A,int>::doSomething() …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-specialization

20
推荐指数
2
解决办法
2万
查看次数

理解(简单?)C++继承

我正在努力理解为什么这段代码片段无法编译.

#include <cstdio>

class A {
public:
    virtual int potential()=0;
    virtual int potential(int arg, int arg2)=0;
};

class B : public A {
public:
    int potential() { return 1; }
    virtual int potential(int arg, int arg2) { return 2; }
};

class C : public B {
public:
    int potential(int arg, int arg2) { return 3; }
};


int main(int argc, char** argv) {
    C c;
    int value = c.potential();
    printf("Got %i\n", value);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我有两个纯虚方法,都potential在抽象超类中命名A …

c++ inheritance

17
推荐指数
2
解决办法
455
查看次数

从C调用Swift的最佳方法是什么?

从Swift调用C非常简单,但我正在研究在C中制作双向包装器,所以我的C必须调用Swift函数.

现在,我可以通过在C中声明函数指针来实现这一点,并且在Swift端将它们设置为在Swift中调用代码之后让我的C函数调用它们.

我的C头文件:

typedef void (*callback_t)(void);

void callBackIntoSwift( callback_t cb );
Run Code Online (Sandbox Code Playgroud)

我的C实现文件:

#include "stuff.h"
#include <stdio.h>

void callBackIntoSwift( callback_t cb )
{
    printf( "Will call back into Swift\n" );
    cb();
    printf( "Did call back into Swift\n" );
}
Run Code Online (Sandbox Code Playgroud)

在桥接头中包含我的C头文件后,我可以在Swift端执行以下操作:

let cb: callback_t = {
    someKindOfSwiftFunction()
}

callBackIntoSwift( cb )
Run Code Online (Sandbox Code Playgroud)

甚至:

callBackIntoSwift {
    someKindOfSwiftFunction()
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,不需要函数指针和回调?我想让C端someKindOfSwiftFunction直接调用...但是当我尝试应用于@convention (c)函数声明时,我得到的消息是该属性只能应用于类型,而不是声明.

例如Github中的任何想法或代码库我都可以看看?

c callback wrapper swift

13
推荐指数
2
解决办法
3038
查看次数

使用AVFoundation准确提取音频块

问题

我希望从视频文件中的音轨中提取样本精确的LPCM音频范围.目前,我正在寻找实现这一目标用AVAssetReaderTrackOutput对一个AVAssetTrack从读取交付AVURLAsset.

尽管准备并确保使用AVURLAssetPreferPreciseDurationAndTimingKeyset to 初始化资产,但在资产中YES寻找样本准确的位置似乎是不准确的.

NSDictionary *options = @{ AVURLAssetPreferPreciseDurationAndTimingKey : @(YES) };
_asset = [[AVURLAsset alloc] initWithURL:fileURL options:options];
Run Code Online (Sandbox Code Playgroud)

这表现为例如可变比特率编码的AAC流.虽然我知道VBR音频流在准确搜索时会产生性能开销,但我愿意为此付费,前提是我提供了准确的样本.

当使用例如扩展音频文件服务和ExtAudioFileRefAPI时,我可以实现样本精确的搜索和音频提取.同样地AVAudioFile,因为它建立在之上ExtAudioFileRef.

然而,问题是我还想从媒体容器中提取音频文件只有API拒绝但在AVFoundation 支持的音频AVURLAsset.

方法

提取的样本准确时间范围使用CMTime和定义CMTimeRange,并设置在AVAssetReaderTrackOutput.然后迭代地提取样本.

-(NSData *)readFromFrame:(SInt64)startFrame
      requestedFrameCount:(UInt32)frameCount
{
    NSUInteger expectedByteCount = frameCount * _bytesPerFrame;
    NSMutableData *data = [NSMutableData dataWithCapacity:expectedByteCount];

    //
    // Configure Output
    //

    NSDictionary *settings = @{ AVFormatIDKey               : @( kAudioFormatLinearPCM ),
                                AVLinearPCMIsNonInterleaved …
Run Code Online (Sandbox Code Playgroud)

audio core-audio avfoundation avassetreader avasset

11
推荐指数
1
解决办法
427
查看次数

如何在发布时清空并完全释放Grand Central Dispatch队列?

我有一个对象,初始化时使用和释放调用创建一个串行 GCD队列.在对象的生命周期内,将调度块添加到队列中,但队列也会停止并使用和启动.dispatch_queue_createdispatch_freedispatch_suspenddispatch_resume

我的问题是,在某一点上,对象可能会被释放,并且在解除分配时,为了整洁,我希望完全丢弃调度队列及其中的所有dispatch_block_t对象,无论队列是否暂停.

据我了解,队列将不再解除分配,直到不再需要它,因为它不再由其中的调度块保留.这让我相信要解除分配队列,我必须通过允许其中的块首先执行终止来清空它.

什么是最简单,最强大的方法?

macos cocoa grand-central-dispatch objective-c-blocks

4
推荐指数
1
解决办法
2830
查看次数

如何确定编解码器/容器组合是否与 FFmpeg 兼容?

我正在考虑重新混合一些保存音频和视频的容器,以便提取最好的第一个音频流,并将其存储在一个新容器中,例如存在音频流。

\n\n

FFmpeg 的输出上下文是这样创建的:

\n\n
AVFormatContext* output_context = NULL;\navformat_alloc_output_context2( &output_context, NULL, "mp4", NULL );\n
Run Code Online (Sandbox Code Playgroud)\n\n

我有一个可接受的输出的候选列表,例如 MP4、M4A 等 \xe2\x80\xa6 基本上是 Apple 的音频文件服务可读的输出:

\n\n
kAudioFileAIFFType              = \'AIFF\',\nkAudioFileAIFCType              = \'AIFC\',\nkAudioFileWAVEType              = \'WAVE\',\nkAudioFileSoundDesigner2Type    = \'Sd2f\',\nkAudioFileNextType              = \'NeXT\',\nkAudioFileMP3Type               = \'MPG3\',   // mpeg layer 3\nkAudioFileMP2Type               = \'MPG2\',   // mpeg layer 2\nkAudioFileMP1Type               = \'MPG1\',   // mpeg layer 1\nkAudioFileAC3Type               = \'ac-3\',\nkAudioFileAAC_ADTSType          = \'adts\',\nkAudioFileMPEG4Type             = \'mp4f\',\nkAudioFileM4AType               = \'m4af\',\nkAudioFileM4BType               = \'m4bf\',\nkAudioFileCAFType               = \'caff\',\nkAudioFile3GPType               = \'3gpp\',\nkAudioFile3GP2Type              = \'3gp2\',\nkAudioFileAMRType               = \'amrf\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的问题是:FFmpeg 中是否有一个简单的 API,可以根据音频流所在的编解码器来选择兼容的输出容器?

\n

audio ffmpeg libavcodec libav libavformat

4
推荐指数
1
解决办法
2470
查看次数

在XCode 4下中断的基于NSDocument的默认MacRuby应用程序

我正在使用MacRuby 0.10和XCode 4,我在其中创建了一个默认的基于NSDocument的应用程序.但是,在构建和运行应用程序时,不会显示任何窗口,并且通常会禁用通常的菜单命令.

在创建常规的基于Cocoa的应用程序时,主应用程序窗口显示正常.

有谁知道修复是什么?

担;

macruby xcode4

2
推荐指数
1
解决办法
196
查看次数