所以我有一个模拟地图const_iterator的智能迭代器,它需要在内部构建返回类型.显然,我想pair<Key, Value>在我的迭代器类中存储一个(因为我需要修改它),但同时我希望dereference函数呈现一个pair<const Key, Value>(实际上它将分别是一个const pair<const Key, Value>&和const pair<const Key, Value>*).到目前为止,我提出的唯一解决方案是每次更改迭代器类指向更改的值时动态分配一个新对.毋庸置疑,这不是一个好的解决方案.
我也尝试过*const_cast<const pair<const Key, Value> >(&value)在哪里value声明pair<Key, Value>.
任何帮助将不胜感激(因为它不能做到的知识).
编辑
对于好奇:我最终pair<const Key, Value> p在我的迭代器类中存储了一个.为了更改对,我根据底层迭代器(map<Key, Value>::const_iterator it)分别更改了两个元素,const_cast使键可以被更改,如下所示:
*const_cast<Key*>(&p.first) = it->first;
p.second = it->second;
Run Code Online (Sandbox Code Playgroud)
不是我非常满意的解决方案,但它完成了工作,并且取消引用方法很高兴,因为我存储的是正确类型的东西,他们可以参考.
我对该功能有迫切的需求std::forward_as_tuple,但仅限于使用 GCC 4.5.0(我知道这是一个糟糕的情况,但它会为我解决很多问题,所以请把尖刻的评论保留在最低限度)。该<tuple>头似乎并不包含函数(因为它应该),所以我的问题是:
我正试图进入tensorflow,建立一个网络,然后向其提供数据.出于某种原因,我最终得到了错误消息ValueError: setting an array element with a sequence.我做了一个我想要做的最小例子:
import tensorflow as tf
K = 10
lchild = tf.placeholder(tf.float32, shape=(K))
rchild = tf.placeholder(tf.float32, shape=(K))
parent = tf.nn.tanh(tf.add(lchild, rchild))
input = [ tf.Variable(tf.random_normal([K])),
tf.Variable(tf.random_normal([K])) ]
with tf.Session() as sess :
print(sess.run([parent], feed_dict={ lchild: input[0], rchild: input[1] }))
Run Code Online (Sandbox Code Playgroud)
基本上,我正在建立一个带有占位符的网络和一系列我想要学习的输入嵌入,然后我尝试运行网络,将输入嵌入到其中.从我通过搜索错误消息可以看出,我可能有问题feed_dict,但我看不出任何明显的不匹配,例如.维.
那么,我错过了什么,或者我是如何完全倒退的呢?
编辑:我编辑了上面的内容,以澄清输入表示需要学习的嵌入.我想问题可以更明确地提出:是否可以使用占位符作为参数?
c++ ×2
c++11 ×1
const ×1
const-cast ×1
gcc4 ×1
python ×1
std-pair ×1
stl ×1
tensorflow ×1
tuples ×1