.cpp:
<?php
/**
* Plugin Name: Fix Instagram oEmbed
* Plugin URI: https://10up.com
* Description: Fix Instagram oEmbed.
* Author: 10up
* Version: 1.0.0
* Author URI: https://10up.com
* License: GPL2
*/
namespace TenUp\Plugin\InstagramFix;
add_filter( 'oembed_providers', __NAMESPACE__ . '\\oembed_providers' );
function oembed_providers( $providers ) {
if ( ! isset( $providers['#https?://(www\.)?instagr(\.am|am\.com)/p/.*#i'] ) ) {
$providers['#https?://(www\.)?instagr(\.am|am\.com)/p/.*#i'] = array(
'https://api.instagram.com/oembed',
true
);
}
return $providers;
}
.h:
Person::Person(int _id[9], string name, int age) :_age(age), _name(name){};
如何使用与年龄和姓名相同的方法来提交'id'字样?
答案 0 :(得分:2)
数组没有复制构造函数,而且此构造函数中的参数_id
Person::Person(int _id[9], string name, int age) :_age(age), _name(name){};
被隐式转换为指向作为参数传入的数组的第一个元素的指针。这实际上是构造函数看起来像
Person::Person(int *_id, string name, int age) :_age(age), _name(name){};
并且指针不会保留信息,无论它是指向单个对象还是指向数组的第一个对象。
因此,您应该使用另一个参数附加此参数,该参数将指定底层数组的大小(如果将此参数作为参数。)
例如
Person::Person(int *_id, size_t id_num, string name, int age)
:_id {}, _age(age), _name(name)
{
size_t size = id_num < 9 ? id_num : 9;
std::copy( _id, _id + size, this->_id );
}
答案 1 :(得分:1)
class Person
{
typedef std::array<int, 9> ids_t;
Person(ids_t, string name, int age);
private:
ids_t _id;
string _name;
int _age;
};
Person::Person(ids_t id, string name, int age) : _id(id), _age(age), _name(name){}
答案 2 :(得分:1)
由于您无法分配C风格的数组,甚至无法使用另一个数组进行初始化,因此可以使用C ++风格的数组(可以分配和复制初始化)使任务更简单:
array<int, 9> _id;
和
Person::Person(array<int, 9> id, string name, int age)
: _id(id), _age(age), _name(name) { }
或者,如果你坚持使用C风格的数组,你可以使用std::copy
将参数数组复制到成员数组:
Person::Person(int id[9], string name, int age) : _age(age), _name(name)
{
copy(id, id + 9, _id);
};
但请注意,传递C风格的数组很糟糕,因为编译器会将所有C风格的数组参数视为指向数组第一个元素的指针。因此id
参数的类型实际上是int*
,因此Person
构造函数的调用者可以传递(使用隐式array-to-pointer decay)任意大小的数组,指向单 int
,甚至是nullptr
的指针,如演示here。尝试从任何这些无效参数中复制9个元素将导致未定义的行为。