我正在使用OpenGL数学库(glm.g-truc.net),并希望glm::mat4使用float-array 初始化a .
float aaa[16];
glm::mat4 bbb(aaa);
Run Code Online (Sandbox Code Playgroud)
这不起作用.
我想这个解决方案很简单,但我不知道怎么做.我找不到关于glm的好文档.我会很感激一些有用的链接.
我不完全清楚应用程序中有多少Dispatchers以及它们与Threads相关或引用的方式.
据我所知,WPF应用程序有2个线程(一个用于输入,另一个用于UI)和1个调度程序(与UI-Thread相关联).如果我创建另一个线程 - 让我们称之为"工作线程" - 当我调用Dispatcher.CurrentDispatcher工作线程时,我会得到哪个调度程序怎么办?
另一种情况:假设一个带有2个线程的控制台应用程序 - 主线程和输入线程.在主线程上,我首先创建输入线程,然后我调用Application.Run()
Thread thread = new Thread(new ThreadStart(UserInputThreadFunction));
thread.Start();
Application.Run();
Run Code Online (Sandbox Code Playgroud)
会有一个调度员,对吗?在输入线程上,Dispatcher.CurrentDispatcher是否返回主线程的调度程序?或者将实例提供给主线程调度程序的正确方法是什么?
可能是WPF应用程序中有多个调度程序吗?有没有,创建另一个调度员是有意义的吗?
我有一个函数,它使用自定义删除器创建unique_ptr并返回它:
auto give_unique_ptr() {
auto deleter = [](int* pi) {
delete pi;
};
int* i = new int{1234};
return std::unique_ptr<int, decltype(deleter)>(i, deleter);
}
Run Code Online (Sandbox Code Playgroud)
在该函数的客户端代码中,我想移动unique_ptr到a shared_ptr,但我不知道如何做到这一点,因为我不知道我的自定义删除器的decltype在函数之外.
我想它应该看起来像这样:
auto uniquePtr = give_unique_ptr();
auto sharedPtr = std::shared_ptr<..??..>(std::move(uniquePtr));
Run Code Online (Sandbox Code Playgroud)
我需要写什么而不是.. ?? ..来获得正确的类型?
如果这是可能的,那么当它的使用计数达到零时,它会shared_ptr表现得很好并调用我在give_unique_ptr()函数内创建的自定义删除器吗?
声明以下函数是否安全,noexcept即使v.at(idx)理论上可以抛出out_of_range异常,但实际上不是由于边界检查?
int get_value_or_default(const std::vector<int>& v, size_t idx) noexcept {
if (idx >= v.size()) {
return -1;
}
return v.at(idx);
}
Run Code Online (Sandbox Code Playgroud) 考虑以下代码(摘自cppreference.com,略有修改):
#include <algorithm>
#include <string>
#include <iostream>
#include <cctype>
int main()
{
std::string str1 = " Text with some spaces";
str1.erase(std::remove(str1.begin(), str1.end(), ' '), str1.end());
std::cout << str1 << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么第二个参数是erase必需的?(str1.end()在这种情况下。)
为什么我不能只提供其返回的迭代器remove来erase?为什么我还必须告诉它要擦除的容器的最后一个元素?
这里的陷阱是,您也可以erase不使用第二个参数就进行调用,但是显然会产生错误的结果。
在某些情况下,我不想将容器的结尾作为第二个参数传递给erase?
省略“ erase删除-删除”习惯用法的第二个参数是否总是一个错误,或者这可能是一个有效的做法?
我已经设法将一帧电影的视频轨道加载到带AVFoundation的OpenGL纹理中.我按照答案中描述的步骤进行操作:iOS4:如何将视频文件用作OpenGL纹理? 并从WWDC2010的GLVideoFrame示例中获取了一些代码,可以在此处下载:http://bit.ly/cEf0rM
如何与视频同步播放电影的音轨.我认为在单独的播放器中播放它并不是一个好主意,而是使用相同的音频轨道OpenGL.
AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)
我检索了一个videoframe,它是CADisplayLink-callback中的时间戳
CMSampleBufferRef sampleBuffer = [self.readerOutput copyNextSampleBuffer];
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp( sampleBuffer );
Run Code Online (Sandbox Code Playgroud)
哪里AVFoundation是类型GLVideoFrame
如何获得相应的音频样本?以及如何玩它们?
编辑:
我看了一下,我想,最好是使用WWDC2010AudioToolbox.framework使用此处描述的方法:AVAssetReader和Audio Queue流问题
AVFoundation中还有一个音频播放器:AVAsset.但我不知道我应该如何将数据传递给它所readerOutput期望的-initializer AVAssetReaderTrackOutput*.此外,我不认为这是我的最佳选择,因为我AudioQueue必须为每个新的音频样本创建一个新的实例,据我所知.
还有其他建议吗?播放原始音频样本的最佳方式是AudioToolbox.framework什么?
Windows Phone 7上没有System.Collections.Generic.HashSet吗?
这个问题是关于拥有指针,使用指针,智能指针,向量和分配器的。
我对代码体系结构的想法有些迷茫。此外,如果这个问题在某个地方已经有答案,1.抱歉,但是到目前为止我还没有找到满意的答案,并且2.请指出。
我的问题如下:
我有一个存储在向量中的“事物”,以及这些“事物”的几个“消费者”。因此,我的第一次尝试如下所示:
std::vector<thing> i_am_the_owner_of_things;
thing* get_thing_for_consumer() {
// some thing-selection logic
return &i_am_the_owner_of_things[5]; // 5 is just an example
}
...
// somewhere else in the code:
class consumer {
consumer() {
m_thing = get_thing_for_consumer();
}
thing* m_thing;
};
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,这是安全的,因为在任何情况下,“事物”的寿命都超过了“消费者”。但是,可以在运行时添加更多的“事物”,这可能会成为问题,因为如果std::vector<thing> i_am_the_owner_of_things;重新分配了这些事物,则所有thing* m_thing指针都将变为无效。
一种解决方案是将唯一的指针存储到“事物”,而不是直接存储“事物”,即如下所示:
std::vector<std::unique_ptr<thing>> i_am_the_owner_of_things;
thing* get_thing_for_consumer() {
// some thing-selection logic
return i_am_the_owner_of_things[5].get(); // 5 is just an example
}
...
// somewhere else in the code:
class consumer {
consumer() {
m_thing …Run Code Online (Sandbox Code Playgroud) 我想在iOS项目中使用ASSIMP库http://assimp.sourceforge.net.不幸的是,我对makefile和那些东西不是很有经验,所以我需要一些帮助.
我已经下载了源代码,首先我尝试用make构建(在代码子文件夹中)在makefile中我添加了INCLUDEFLAGS = -I/Lib因为我的boost头文件在/ Lib/boost中执行make static成功但有一些警告.生成静态库(.a).
然后我尝试将.a文件添加到我的xcode项目中,并将assimp-header文件夹指定为附加的include目录(Other Search Paths).链接失败的消息是库没有正确的架构(模拟器需要i386)
file libassimp.a 输出:"libassimp.a:当前ar存档随机库"
我如何为i386架构和arm6或arm7构建库,无论我在iOS设备上需要什么?
是否可以仅使用boost-headers,还是更好/有必要将boost构建为库?目前我只使用boost头,这应该没问题,因为boost是一个只有头的库?!
还有一个cmake - makefile(CMakeLists.txt).cmake是建立图书馆的推荐方式,但我对cmake没有任何经验.
或者另一个想法:是否可以通过xcode构建库?最终结果应该是i386,arm6和arm7架构的库.
我该怎么办?如何?
编辑:
我刚刚发现文件中有以下预处理程序检查aiDefines.h:
#if defined(_MSC_VER)
// See http://msdn.microsoft.com/en-us/library/b0084kay.
# if defined(_M_IX86)
# define ASSIMP_BUILD_X86_32BIT_ARCHITECTURE
# elif defined(_M_X64)
# define ASSIMP_BUILD_X86_64BIT_ARCHITECTURE
# elif defined(_M_IA64)
# define ASSIMP_BUILD_IA_64BIT_ARCHITECTURE
# else
# error unknown architecture
# endif
#elif defined(__GNUC__)
// See http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html.
# if defined(__x86_32__) || defined(__i386__)
# define ASSIMP_BUILD_X86_32BIT_ARCHITECTURE
# elif defined(__x86_64__)
# define ASSIMP_BUILD_X86_64BIT_ARCHITECTURE
# …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个自定义变体类型,它使用union来存储各种不同类型的数据.在该领域,type_id我计划存储联合中存储的数据的类型.工会包含非平凡的成员.这是我目前的实施:
struct MyVariant {
enum { t_invalid, t_string, t_int, t_double, t_ptr, t_dictionary } type_id;
union {
int as_int;
double as_double;
std::string as_string;
std::unique_ptr<int> as_ptr;
std::map<int, double> as_dictionary;
};
};
Run Code Online (Sandbox Code Playgroud)
我尝试创建一个MyVariant类似如下的实例:
MyVariant v;
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:调用隐式删除的MyVariant默认构造函数.所以,我尝试手动实现构造函数,如下所示:
MyVariant() : type_id{t_int}, as_int{0} {}
Run Code Online (Sandbox Code Playgroud)
这给了我一个类似的错误消息:尝试使用已删除的功能.接下来,我尝试实现以下构造函数:
MyVariant(int value) : type_id{t_int}, as_int{value} {}
Run Code Online (Sandbox Code Playgroud)
并构造我的实例如下:
MyVariant v{123};
Run Code Online (Sandbox Code Playgroud)
=>相同的错误消息:尝试使用已删除的功能.
我也开始实现一个拷贝构造函数,它看起来如下.但是,当然这对编译器错误没有帮助.
MyVariant::MyVariant(const MyVariant& other)
{
type_id = other.type_id;
switch (type_id) {
case t_invalid:
break;
case t_string:
new (&as_string) std::string();
as_string = …Run Code Online (Sandbox Code Playgroud) c++ ×6
c++11 ×3
c# ×2
c++14 ×2
ios ×2
shared-ptr ×2
unique-ptr ×2
.net ×1
allocator ×1
avfoundation ×1
boost ×1
cmake ×1
constructor ×1
dispatcher ×1
function ×1
glm-math ×1
ios4 ×1
makefile ×1
math ×1
noexcept ×1
opengl ×1
opengl-es ×1
silverlight ×1
stl ×1
unions ×1
wpf ×1