- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试创建一个类,该类将包含 type_index
键映射到作为模板参数传递的每种类型的指针。这将允许我在其声明中指定我的类将依赖的一系列类型。
我做了一些研究,但似乎只能找到解包参数的方法,而不是类型。我是这个主题的新手,如果能对术语进行任何澄清或对相关文本的引用,我将不胜感激。
template <typename T>
T* SomeFakeFactoryGetter() { return new T(); }
template <class... Injected>
class UtilityProvider
{
public:
template <class U>
U* GetUtility()
{
std::type_index idx = std::type_index(typeid(U));
assert(_injectedClasses.find(idx) != _injectedClasses.end());
return reinterpret_cast<U*>(_injectedClasses[idx]);
}
// **
// How would I *unpack* all types for use as indices into my map?
// ( I realise this function is not what I want.)
template <Injected... C>
void Unpack()
{
_injectedClasses[std::type_index(typeid(C))] = SomeFakeFactoryGetter<C>();
}
private:
typedef std::unordered_map<std::type_index, void*> InjectedMap;
InjectedMap _injectedClasses;
};
class Bar{ public: void A() { printf("Hello bar"); } };
class Baz{ public: void B() { printf("Hello baz"); } };
class Nope {};
class Foo : public UtilityProvider<Bar, Baz>
{
public:
Foo()
{
GetUtility<Bar>()->A();
GetUtility<Nope>(); // Fail. User must specify which utilities this class will use.
}
};
最佳答案
我在这种情况下所做的是创建一个虚拟函数来扩展这些表达式,但它看起来很丑陋:
template <int ... Dummies>
void dummy(int&& ...){}
template <class ... C>
void Unpack()
{
dummy(((_injectedClasses[std::type_index(typeid(C))] =
SomeFakeFactoryGetter<C>()), 0)...);
}
请注意,在您的情况下,我认为将 insert
与 initializer_list
结合使用会更好:
template <class ... C>
void Unpack()
{
_injectedClasses.insert({std::make_pair(std::type_index(typeid(C)),
SomeFakeFactoryGetter<C>())...});
}
我找不到对此的直接提及,但我相信这两种方法之间存在重要区别,以防您不知道。 insert
不会覆盖现有的键值对,而 operator[]
会。如果这对您很重要,这会影响您应该使用哪种方法。
关于c++ - 可变参数模板类型解包到映射键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19827768/
考虑以下两个应用程序: 1: public partial class MainWindow : Window { public MainWindow() { Init
我写了一些被https://github.com/protobuf-c/protobuf-c/wiki/Examples引用的c代码 Operation msg = OPERATION__INIT;
我在使用 SwiftyJSON 正确解开字符串时遇到问题 output: ["AAPL"] stockData = try Data(contentsOf: url!)
我有一个只包含属性的类,我想对其进行打包/解包。我应该实现什么 collections.abc 才能获得此行为? class Item(object): def __init__(self,
考虑以下表达式。请注意,某些表达式被重复以呈现“上下文”。 (这是一个很长的 list ) a, b = 1, 2 # simple sequence
我正在尝试将变量表作为参数解包到函数调用中。简而言之,我正在考虑通过这样做将依赖项注入(inject)到我的过程中。当我在 https://www.lua.org/cgi-bin/demo 执行此操作
我正在尝试弄清楚如何赋予对象解包值的能力。 我想出的用例如下: 让我们有一个 Interval 类,我们将使用它来评估实值函数。 我们想问 成员资格,因此 __contains__。 通过调用特定步骤
所以我知道有一些库可以为我做到这一点,但我想学习打包/解包。 我的目标是让用户输入 IP 地址/子网掩码,然后验证其是否有效。 我想到的一种方法是“sprintf”并获得一个二进制值,比如说 192.
所以我知道有一些库可以为我做到这一点,但我想学习打包/解包。 我的目标是让用户输入 IP 地址/子网掩码,然后验证其是否有效。 我想到的一种方法是“sprintf”并获得一个二进制值,比如说 192.
我正在通过Go v1.13 Go v1.14中的错误跟踪进行检查。为什么看起来只有errors.Is()才能找到没有参数或带有值接收器的错误实现?这意味着能够包装的错误实现必须具有一个值接收器,以便能
我需要解包由其他开发人员创建的 Oracle 包。我在我的数据库中创建了 Prackage,但采用加密格式。 我需要的原因是,原来的开发人员已经离开了组织,现在包中定义的过程需要重新定义,以更新 DB
我打算在文件中使用 unpack。首先我用一个字符串测试。当我在字符串中嵌入空格时,下面的脚本将其显示为空。当我测试文件空间时,它正在被正确读取。不确定为什么在我处理字符串时将其更改为 null。我可
我在 Perl 中遇到这个问题已经有几天了,在搜索了无数的手册页、perldocs 和谷歌搜索了太多的搜索词之后,希望这里有人能帮助我。 我得到两个表示十六进制值的字符串,即“FFFF”,而不是 Pe
在 Python 中解压 SequenceMatcher 循环结果以便轻松访问和处理值的最佳方法是什么? from difflib import * orig = "1234567890" comme
假设,我有一个列表, [(1,2), (3, 4)]. 如果列表中的所有元素都是元组,我将打印 1 + 2 和 3 + 4。但是,如果任何一个元素也是一个列表,那么我将 1 加到内部列表的每个元素,并
我有这样的字典列表。 rows = [ {'user': staff_user, 'grade': [u'0.0', u'N/A', u'N/A', u'N/A', u'N/A']}, {'user'
我有这个代码... function a(options) { for (var item in options) { if ( ! options.hasOwnProperty
我试图通过 std::tie 解压一个 std::array: #include #include int main() { std::array arr = {1, 2, 3};
我的数据包嗅探器有问题。目标端口和源端口在我的嗅探器中似乎是错误的。在 wireshark 中,端口与我的嗅探器完全不同。没有结果包含预期来自 TLS 的端口 443。 (整个 tcp 片段可能是错误
如何使用 php 以大端字节顺序打包/解包 float ?我通过解包功能走到了这一步,但我不确定这是否可行。 function unpackFloat ($float) { $n = unpa
我是一名优秀的程序员,十分优秀!